Código:
En la base de datos tengo un usuario que se llama admin (con pass:123) y otro que se llama prueba (con pass 333). El caso es que si pongo:<? if($_POST['nombre'] && $_POST['password']) { $nombre = $_POST['nombre']; $password = $_POST['password']; // Conectamos con la base de datos $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'xxxxx'; $conexion = @mysql_connect($dbhost, $dbuser, $dbpass) or die("Fallo al conectar con la base de datos"); @mysql_select_db('mibase', $conexion) or exit(mysql_error()); // Comprobamos que el usuario y password son válidos $consulta = "SELECT * FROM Usuarios WHERE nombre='$nombre' and password='$password'"; $resultado = mysql_query($consulta); if(mysql_num_rows($resultado) == 1) echo "ACCESO PERMITIDO"; else echo "ACCESO DENEGADO"; } else echo "Tiene que rellenar los dos campos"; ?>
nombre:admin
password:123
Me dice que tengo acceso permitido y si pongo un echo mysql_num_rows($resultado) me da como resultado 1, es decir, sólo ha afectado a una fila. Todo correcto.
El caso es que estoy mirando sobre sql-injection y si por ejemplo pongo
nombre:admin
password:1'OR'1'='1
me dice acceso denegado ya que si hago un echo mysql_num_rows($resultado) me da como resultado 2.
¿Porque me da resultado 2? En teoria solo se ve afectada la fila del admin, la del usuario prueba no interviene para nada, ya que la consulta sql quedaría:
$consulta = "SELECT * FROM Usuarios WHERE nombre='admin' and password='1'OR '1'='1'";
A ver si alguien me puede decir porque da como resultado 2... gracias