Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/09/2007, 19:35
jose.va18
 
Fecha de Ingreso: marzo-2007
Mensajes: 12
Antigüedad: 17 años, 2 meses
Puntos: 1
duda mysql_num_rows

Hola verán tengo un formulario típico de logueo, en el que se introducen el nombre y password y lo envia por POST al loguin.php que tiene el siguiente código:
Código:
<? 
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";
?>
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:
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