PHP ile Basit Sql İnjection önlemi
ahanda şu gördüğünüz basit fonksiyon sayesinde web uygulamalarının (sitelerinin) en çok kullanılan dillerinden biri olan PHP'de hacker arkadaşın sizin Sql sorgunuza müdahale etmesini yani Sql enjection yapmasını engelliyebilirsiniz... isterseniz kullanulan fonksiyonların açıklamalarını kod içinde görebilirsniz..
{
if(get_magic_quotes_gpc()) // magic_quotes_gpc açıksa
{
$string = stripslashes($string); // bu fonksiyon escape edilmiş zararlı karakterleri düzeltmemizi sağlıyor
}
elseif(!get_magic_quotes_gpc()) // magic_quotes_gpc kapalı ise
{
$string = addslashes($string); // bu zararlı karakterleri escape etmemize yarıyor..
} // bitti bu kadar
$string = @mysql_real_escape_string($string); // bu son önlem olarak $string değişkeni içindeki her bi zararlı şeyi yok ediyor
return $string; // son olaraktaa temizlenmiş ve pisliklerinden ayrılmış bir $string değişkeni elde ediyoruz...
} // bitti
?>
kullanmak için ise atıyrum cevap isimli inputbox'a giren zararlı karakterleri engelleyip sql injection'u önlemek istiyosanız...
yukarıdaki kodları PHP sayfanızın başına yazdıktan sonra,
yazmanız yeterli olacaktır
iyi günler

yazdığınız fonksiyonda yanılmıyorsam bir hata var.
yazımda magic_quotes_gpc ye direk gpc diyeceğim. çünkü yazması dert.
şimdi gelen veri gpc açık ise slashlardan arındırılıyor. ama gpc kapalı ise slashlar ekleniyor.
amaç gpc nin durumunu kontrol ederek veriye slashlar eklemek. bu fonksiyon gpc nin açık veya kapalı olmasını kontrol edip her türlü durumda aynı sonucu döndürmeli. ama bu fonksiyon gpc durumunun farklı olduğu sunucularda farklı sonuçlar dönderecektir. buda sunucu sahibinib gpc yi değiştirmesi durumunda aksaklıklara neden olacaktır.
şöyle yapılabilirdi. mantığı şu yani: eğer gpc açık ise veriye slashlar eklenmiştir zaten. eğer kapalı ise slashları biz ekleyecez. yani sonuç olarak gpc açıkta olsa kapalıda olsa slashlar eklenmiş veriyi elde edeceğiz. ardından mysql_real_escape_string ile tekrar veriye slashlar eklenip veriler veritabanına slashlarla birlikte kaydedilebilir.
ama verilerin veritabanına slashsız olarak kaydedilmesini ve sadece sql injectiona karşı önlem alınmasını istiyor olabilirsiniz. bu durumda gpc yi kontrol edip eğer açık ise bir kere stripslashes uygulayarak slashardan arındırılmasını, eğer gpc açık değil ise veriye aynen ulaşılmasını sağlamalıyız ve sonra mysql_real_escape_string ile veri injection’a karşı temizlenmiş olarak sorguya sokulabilir.
örnek bir fonksiyon
function addescape($text) {
if(get_magic_quotes_gpc()) {
$text = stripslashes($text);
}
$text = addslashes(mysql_real_escape_string($text));
return $text;
}
yukardaki fonksiyon sql injection engelleyecektir ve veriler veritabanında slashlı bir şekilde kaydedilecektir.
function addescape($text) {
if(!get_magic_quotes_gpc()) {
$text = addslashes($text);
}
$text = stripslashes(mysql_real_escape_string($text));
return $text;
}
yukarıdaki fonksiyon ise gene sql injection’ı engelleyecektir. ama ilk fonksiyondan farklı olarak veri veritabanında slashsız olarak bulundurulacaktır.
son eklediğim fonksiyon şu şekilde olmalıydı. aynı sonucu döndürüyor ama daha az iş yapııyor.
function addescape($text) {
if(get_magic_quotes_gpc()) {
$text = stripslashes($text);
}
$text = mysql_real_escape_string($text);
return $text;
}
Yorum Yapın
Arayan Bulur
Sayfalar
kategoriler
Destek & Köstek
Yeni düşenler
Arşivler
Linkler
Etiketler
İnternet Ajax Benim Dünyam Bilgisayar Blogroll CSS Duyuru Eleştiri Günlük Genel google Haber Hayat Kategorilenmemiş Kitap Komedi Müzik Makale Makaleler Mim PHP Proje Sinema Tanıtım Web 2.0 Web Geliştirme WordPress Wordpress Eklentisi Yaşam Yazılımlar
Sosyal Mevzular