Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5

SQL Injection Bulma ve Kapatma
Konuyu Başlatan: root, Görüntülenme: 371, Yanıtlar: 0

Konuyu Görüntüleyenler: 1 Ziyaretçi
#1
SQL Injection, daha çok veritabanı sorgularıyla ilgili bir açık. Fazla konuşmadan örnek vereyim.

Mesela kodların/sorgun şu şekilde:



PHP- Kodu:

Kod:
$id = $_GET['id'];  

mysql_query("SELECT * FROM kullanicilar WHERE id='$id'");  


Eğer get ile aldığın veriyi direkt olarak sorgunun içine dahil edersen neler olacak şimdi görelim.

Diyelim ki id değeri 10



PHP- Kodu:

Kod:
mysql_query("SELECT * FROM kullanicilar WHERE id='10'");  


Sorunsuz bir sorgu oldu. Ama diyelim ki get ile aldığımız veri 10' olarak gönderilmiş. Bu kez ne olacak?



PHP- Kodu:

Kod:
mysql_query("SELECT * FROM kullanicilar WHERE id='10''");  


Sorun oluşacak. Bu şekilde sitenize saldıranlar çeşitli saldırılar yapabilecekler. Bu açığı kapatmanız lazım. Çok şey yapmanıza gerek yok. Bunu kapatmak için tek yapmanız gereken şu. " ve ' işaretlerini süzmek. İster toptan yokedin bunları isterseniz de başka değerlere çevirin. Ama sözkonusu mysql sorgusu olduğuna göre mysql connect kullanmışsınızdır. Bu durumda mysql_real_escape_string fonksiyonu bulunmaz nimet. Tek yapacağınız şu.




PHP- Kodu:

Kod:
$id = mysql_real_escape_string($_GET['id']);  


Böylece mysql sorgularına aykırı olabilecek her türlü girdi süzülecek, düzenlenecek ve $id değişkenine öyle atanacak. Sorun ortadan kalktı.

Tam olarak SQL Injection olmasa da benzer bazı zararlı durumlar da var. Örneğin id değeri sadece sayı olacaksa (integer) kontrol etmeniz gerekir. 



PHP- Kodu:

Kod:
$id = $_GET['id'];  
if(!is_int($id)){  
//integer değilse bunu yap  
}  
else{  
//integersa bunu yap  
}  


Sql açığını kapatamayanlar pm atarsa yardımcı olurum.
 
Alıntı
  
[ Etiketler: injection | bulma | kapatma ]


Hızlı Menü: