PHP uygulamalarında veritabanı güvenliği gereği, gerek POST ve gerekse (özellikle) GET metodu ile elde ettiğimiz değişkenleri belirli süzgeçlerden geiçririz. Örneğin “Yaş” adlı bir form elemanına sadece rakam girilmesi gerekir. Bizede bu alanın “tamsayı” olup olmadığını kontrol etmek düşer.
Fakat genellikle SQL Injection tarzı saldırılar, kayıtların sayfalanması ve benzeri GET metodu üzerinden çalışan noktalardan gelir. Örneğin bir ürün/kategori sisteminde kategori.php?id=5 şeklinde kategori içeriğini listeleriz. Buradan da anlıyoruz ki hazırladığımız sisteme göre id daima bir tamsayı olmalıdır. 1 3 5 7 gibi.. 1,5 olamaz, yada -1 olamaz. Database ve (int) tanımlı tablo alanları söz konusu olduğunda tanım aralığı 0 dahil tüm pozitif tam sayılardır.
Tam bu noktada $_GET[] array’ı içinde gelen “id” anahtarının taşıdığı değerin “TAMSAYI” olduğundan emin olmamız gerekiyor. Bunu kontrolü PHP’nin çeşitli fonksiyon ve kontrolleriyle yapmaktayız. Benim bu iş için incelediğim ve sağlamlığını onayladığım tek fonksiyon ctype_digit() oldu. Birçok programcı ise -1 .. 1,5 .. 1e5 gibi değerleri de kabul eden (true döndüren) is_numeric() fonksiyonunu kullanmakta.
is_numeric() ‘e göre :
‘-42′ true
‘13,37′ true
‘1e4′ true
‘9.1′ true
değer döndürür, ama bu değerlerin hiç biri yukarıdaki tanım aralığında öngördüğümüz değerler dahilinde değildir.
ctype_digit() ‘e göre :
‘-1′ false
‘1.341′ false
‘5,139′ false
‘0′ false
‘1e3′ false
‘1231231a’ false
iken, 1 ve üzeri tüm pozitif değerler true’dur.
Sonuç olarak özellikle $_GET üzerinden kullanılan sayfalama, üye ID vb. veritabanı alanlarını kontrol ederken ctype_digit() kullanmalıyız. Onun dışında form validation amaçlı olarak da Yaş, Doğum tarihi verileri gibi profil alanlarının da kontrolünde kullanılabilir.
'42' is numeric '1337' is numeric '1e4' is numeric 'not numeric' is NOT numeric 'Array' is NOT numeric '9.1' is numeric

Sanırım ufak bi yanlışınız var..
ctype_digit() ‘e göre :
‘-1′ false
‘1.341′ false
‘5,139′ false
‘0′ false
‘1e3′ false
‘1231231a’ false
iken, 1 ve üzeri tüm pozitif değerler true’dur.
——–
‘0′ false döndürmüyor true döndürüyor.
iyi çalışmalar.