Seo yaparak sql injection önlendiğini ilk defa duydum. Sistemimde linklerin tamamı zaten seolu. Seo konusunda herhangi bir problemim yok. Ama bunun bir çözüm olacağını düşünmüyorum.
eğer dosya isimlerinizi saklıyorsanız htaccess ile url rewrite yani seo url de bir çeşit korunma yöntemidir. çünkü dosya isminizi ve gönderdiğiniz get değişkeninin ismini saklarsınız.
eğer
RewriteRule ^haber-(.*)-(.*)\.html$ haber.php?id=$1 [L,NC]
şeklinde rewrite kuralı yazarsanız elbette korunma olmaz
ama
RewriteRule ^haber-([0-9]+)-(.*)\.html$ haber.php?id=$1 [L,NC]
şeklinde yazarsanız id alanına rakam dışında bir değer gelirse rewrite olmaz ve 404e düşer.
Elbette haber.php dosyasından kullanıcının habersiz olması lazım yani scriptin size özel olması lazım. Eğer scriptinizi satıyorsanız ve insanların dosya isimlerinizden ve değişken isimlerinizden haberleri varsa ya da tahmin edilebilir dosya ve değişken isimleri kullanıyorsanız bu bir koruma değildir.
Önce htaccess ile rewrite yaparken karakter sınırlaması, sonra gelen her input için karakter kontrolü yapılması beklenilmeyen tiplerin reddedilmesi, sonra da karakter kontrolünü geçen inputların filtrelenmesi lazım
FİLTRELEME SADECE GET POST DEĞİL İŞLEME GİREN VE MANİPÜLE EDİLEBİLEN TÜM GLOBALLER İÇİN YAPILMALIDIR. user agent, cookie, referrer, post, get...
Mesela id alanında database tablonuz integer 11 karakter sınır varsa buradan gelen veriyi strlen ile kontrol edersiniz 11 karakterden uzunsa direk işlemi kesersiniz. Verinin içinde olması gereken karakterleri belirlersiniz, eğer beklenen karakterler dışında ascii karakter özel işaret varsa direk işlemi kesersiniz. yani mysql_real_escape_string e girmeden önce verinin kullanılış tipine göre kontroller yapılmalı beklenmeyen türde veride işlem kesilmeli, beklenen türde veri de filtreye sokulmalı.