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?