Sto cercando di conoscere PHP e SQL Injection, quindi ho creato un modulo di login in cui gli utenti introducono il loro nome utente e password e fanno clic sul pulsante Login. Più tardi nel server ottengo i parametri passati usando $ _POST variabile globale.
Questo è il codice utilizzato per verificare se le credenziali dell'utente sono valide:
$email = $_POST['u_email'];
$password = $_POST['u_password'];
$query = "SELECT * FROM User WHERE EMAIL='$email' AND PASSWORD='$password'";
$result = $mysqli->query($query);
$counter = mysqli_num_rows($result);
if($counter == 1)//Correct Login
Il problema è che penso che se un utente immette il seguente testo nei campi username e password, l'accesso dovrebbe essere eseguito (anche se non sono valori validi perché non esistono nel DB).
Username: xxx' OR '1'='1/*
Password: */
Penso di sì perché sarebbe tradotto in:
$query = "SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1/*' AND PASSWORD='*/'";
In altre parole:
$query = "SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1'";
Ma SQL Injection non funziona, perché?
Il mio DBMS è MySQL.