Estoy tratando de aprender sobre inyecciones de PHP y SQL, por lo que he creado un formulario de inicio de sesión donde los usuarios introducen su nombre de usuario y contraseña y hacen clic en el botón Iniciar sesión. Más adelante, en el servidor, obtengo los parámetros pasados usando la variable global $ _POST.
Este es el código utilizado para verificar si las credenciales de usuario son válidas:
$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
El problema es que creo que si un usuario ingresa el siguiente texto en los campos de nombre de usuario y contraseña, el inicio de sesión debe hacerse (aunque no son valores válidos porque no existen en la base de datos).
Username: xxx' OR '1'='1/*
Password: */
Creo que sí, porque eso se traduciría a:
$query = "SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1/*' AND PASSWORD='*/'";
En otras palabras:
$query = "SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1'";
Pero la inyección SQL no funciona, ¿por qué?
Mi DBMS es MySQL.