Sto leggendo la guida in sicurezza php (davvero ottima e ben fatta). Io sono curioso per natura
, quindi sto provando tutte le query injection (e relativi sistemi per respingerle).
Durante la prova, però, ho visto qualcosa di anomalo. Questa è la query di login (semplice):
Codice PHP:
$q = "SELECT * FROM `Login` WHERE user='$login' AND pwd='$pwd'";
$query = mysql_query($q) or die(mysql_error());
$num=mysql_num_rows($query);
if($num==1){
header("Location: pag2.php");
}
else{
header("Location: index.php");
}
$_SESSION['num']=$num;
Ho provato questo codice, che c'era nella guida:
Codice PHP:
user=pippo' OR 1=1 --
pwd=''
Ma con il controllo del $num che ho fatto sopra non riesce a entrare. Ho provato anche a stampare $num in pag2 tramite il passaggio di variabili di sessione e ho visto che effettivamente è pari a 0.
Da notare che se inserisco user=pippo' OR 1=1 -- direttamente nel database me lo prende e mi visualizza tutte le login.
Se fosse così, significa che basterebbe quel semplice controllo per bloccare la query injection, senza bisogno di sostituire gli apici singoli o di applicare altre protezione. Ma ovviamente non può essere così. Dov'è che mi sfugge il concetto?