Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/10/2009, 09:12
Avatar de conkerick
conkerick
 
Fecha de Ingreso: febrero-2009
Ubicación: WWW
Mensajes: 75
Antigüedad: 16 años
Puntos: 2
Respuesta: Problema de seguridad

Creo que sería más conveniente que la consulta te devuelva los datos si el email y el password son correctos.

En vez de:

Código:
mysql_query("SELECT email,password,id_shopper FROM shoppers WHERE email =\"".mysql_real_escape_string($email)."\"") or die(mysql_error());
Sería:

Código:
mysql_query("SELECT email,password,id_shopper FROM shoppers WHERE email='mysql_real_escape_string($email)' AND password ='mysql_real_escape_string($password)' LIMIT 1") or die(mysql_error());
Entonces, si el email y password introducidos, no concuerda con algún registro de la BD, puedes redireccionar a otro lado, en cambio, si encuentra un registro don dichos datos, recuperas los campos que desees y muestras mensajes o redireccionas al usuario.

Esta una una idea muy básica, pero te puede servir a mejorar el login de tu aplicación, OJO no he probado si funciona:
Código PHP:
<?php
function limpiar_variables($var){
    
// REMPLAZO CARACTERES PARA EVITAR INYECCION
    
$pattern = array("'",'\\','<','>',"\"",";","$","|","{","}","+","#");
    
$var str_replace($pattern''$var);
    
// ESCAPO CON MYSQL Y LA VARIABLE DEBERIA ESTAR MUY LIMPIA
    
return mysql_escape_string($var);
}

$email limpiar_variables($_POST['email']);
$password limpiar_variables($_POST['password']);

if(
strlen($email) < or strlen($password) < 3){
    
// EL EMAIL O PASSWORD ES MUY CORTO, MENOR A 3 CARACTERES
    // MUESTRO MENSAJE O REDIRECCIONO
    
header('Location: error.php');
    exit();
}

// HAGO LA CONSULTA

$sql mysql_query("SELECT email,password,id_shopper FROM shoppers WHERE email='$email' AND password ='$password' LIMIT 1") or die(mysql_error());
// COMPRUEBO SI SE ENCONTRO UN REGISTRO CON DICHOS DATOS
if(mysql_num_rows($sql) == 1){
    
// SI ENCONTRO UN REGISTRO, LOS DATOS SON VALIDOS
    // AQUI HACES LO QUE DEBERIA HACER SI SON CORRECTOS
}
else{
    
// NO SE ENCONTRO UN REGISTRO DON DICHOS DATOS
    // REDIRECCIONO O MUESTRO MENSAJE
    
exit();
}
?>
Fíjate que la función "limpiar_variables" elimina caracteres potencialmente peligrosos y escapa la variable, osea, que debería estar limpia y evitar un poco más la inyección de código.

Saludos.