Genel olarak SQL Injection açıklarının ana kaynağı kontrol edilmemiş $_POST ve $_GET değerleridir.

İlk olarak bu değerlerimizi kontrol ettirelim.
Örnek $_POST kontrolü;

$verimiz = $_POST['veri'];

//Veride SQL terimleri var mı yok mu kontrolü yapan fonksiyonumuz;
function ctrl($suz) {
$sansurle = array('CREATE','DELETE','SELECT','FROM','LIMIT','TABLE');
$editle = array('---','---','---','---','---','---');
$isle = str_replace($sansurle,$editle,$suz);

$safhal = mysql_real_escape_string($isle);

return $safhal;

}

$veri[2] = ctrl($verimiz); // Kontrolden geçirdik artık işlem yapabiliriz.


Aynı şekilde $_GET'e uyarlarsak;


$verimiz = $_GET['veri'];

//Veride SQL terimleri var mı yok mu kontrolü yapan fonksiyonumuz;
function ctrl($suz) {
$sansurle = array('CREATE','DELETE','SELECT','FROM','LIMIT','TABLE');
$editle = array('---','---','---','---','---','---');
$isle = str_replace($sansurle,$editle,$suz);

$safhal = mysql_real_escape_string($isle);

return $safhal;

}

$veri[2] = ctrl($verimiz); // Kontrolden geçirdik artık işlem yapabiliriz.


$_GET ve $_POST değerlerinde sayı kontrolü;

Bu iş için intval(); kullanılabilir ama ben intval(); kullanmayı sevmiyorum. 32 bit ve 64 bit işletim sistemlerine göre alabileceği maksimum değerler değişiyor. Bazen hata verebiliyor. Bu yüzden Türk işi bir çözüm var :cool:


// Örnek $_GET

$veri = $_GET['sayi']+0;

// Örnek $_POST

$veri = $_POST['sayi']+0;


Gelen sayıyı sıfırla topladığımızda hiçbir şey değişmiyor ancak gelen bir harf, kelime, vs. olsaydı değer otomatik olarak "0" olacaktı.