beyler htaccess yazarken bile filtreleme yapmayan (.*) veren bir milletiz.
Oysa oradan gelen değer sef url ise ([a-zA-Z0-9-]{1-100}) sayı ise ([0-9]+) verirsen sql injection arkada o dosyaya bile ulaşmaz. ama bir çok acemi ya da tembel arkadaşımızın (.*) diye genel kuralı verip her çeşit stringi input olarak yönlendirdiğini görüyorum.
Veri filtrelemeden önce veri kontrolü yapmak lazım.
Önce kontrol edeceksin gelen veri beklediğin türde mi.
Gelen veri sayı mı, yazı mı, içinde html etiket var mı, içinde tek tırnak çift tırnak kullanma izni var mı, stringin maksimum uzunluğu ne olabilir?
Bunları kontrol edeceksin, eğer beklediğin gibi input gelmezse direk reddedeceksin.
İnput beklediğin gibi ise yine de filtreleyeceksin.
Ayrıca sadece get ve post değil. http referrer, cookie gibi kullanıcı taraflı manipüle edilebilecek tüm dataları önce kontrol etmek sonra filtrelemek lazım.