Selamlar,
SQL Injection açıklamak için yine her zamanki gibi kelime anlamlarından başlayalım. Sanıyorum SQL'i tanıtmaya gerek yok. Veri tabanı üzerinden sorgulama dilimiz. Injection; sözlükte zerk etmek olarak geçiyor, sanıyorum günümüzde çok kullanılan bir kelime değil. Genellikle enjeksiyon kelimesini daha çok kullanıyoruz. Yani bir şırınga ile ilacın vücüda zerki.
Kelimeden yola çıkarsak uygulamanın içine bir şekilde SQL kodunu yerleştirmemiz gerektiğini anlayabiliriz. Genellikle uygulamanın herhangi bir yerinde bir girdi varsa (genellikle textbox kullanılır), bu girdiye bir şekilde SQL kodu çalıştırılmak üzere yazılır. Asıl amaç elektrikde olduğu gibi kısa devre yapmaktır, kazanımları çok büyük olabilir. Mesela direk login ekranı üzerinden yapıldığında kişinin bir kullanıcı adı olmasa bile direk girebilmesini, zaman zaman yönetici hakkını bile alabilmesi söz konusu oluyor.
Genel olarak uygulama hata aldırılıp uygulama ve sunucu için bilgi toplamak için kullanılır. Eğer direk yönetici hakkı alınabilirse ne alâ.
Örnek verip vermemek konusunda açıkçası biraz çekindim :) Şimdi insanları gidin bunları yapın araştırın açık yakalayın gibisinden teşvik etmek de istemiyorum.
En bilinen örneklerinden birini yine de vereyim.
Bir textbox içinde
' or 1=1 --
yazalım. Eğer bir koruma yapılmadıysa ve kod "select * from uyeler where adi = '$uye_adi' and sifre = '$sifre'" şeklinde bir geliştirme yapıldıysa ne olacak?
bu değer "select * from uyeler where adi = '' or 1=1 --'and sifre='sifre'" diye değişecek. Bursa sorun -- işareti sql üzerinde comment/yorum satırı olduğu için adı = '' ya da 1=1 demiş olacağız. yani 1=1 olduğu için koruma yoksa direk login olabiliriz.
Nasıl korunacağız?
- Eğer piyasadaki framework'lerden birini kullanıyorsanız muhtemelen koruyordur zaten.
- PreparedStatement kullanmak en güzel yollardan biridir. Kullandığınız programlama dilinde preparedstatement vardır sanıyorum. En azından java/php de var.
- Dile göre sql escape dediğimi kavram var bu yapılabilir.
- Kendiniz bir kod yazıp sql sorgusu içinde istenmeyen karakter var mı diye bakabilirsiniz.
İyi çalışmalar.