Foros del Web » Programando para Internet » PHP »

Validar mail y password con PDO - Pequeño inconveniente

Estas en el tema de Validar mail y password con PDO - Pequeño inconveniente en el foro de PHP en Foros del Web. Buenas, me gustaría que me ayuden a resolver esto de manera inteligente y acorde con la necesidad que tengo. Bueno, resulta que hago un logueo ...
  #1 (permalink)  
Antiguo 30/09/2014, 15:02
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Validar mail y password con PDO - Pequeño inconveniente

Buenas, me gustaría que me ayuden a resolver esto de manera inteligente y acorde con la necesidad que tengo.

Bueno, resulta que hago un logueo y utilizo PDO, y me surge un tropiezo de que necesito limitar la cantidad de intentos del usuario. Mi jefe me ha pedido que por seguridad bloquee al usuario por X tiempo, por seguridad, ya sea que estén intentando usar su identidad o que sea un robot. Tiene sus PRO y CONTRAS. Se entiende.

El inconveniente es el siguiente, no es tan grave, pero debo saltarlo, pido por SQL los datos por el EMAIL, que sería el usuario... Si verifico que el mail existe, como segundo paso comparo las claves. Si la clave es correcta, lo logueo y reseteo los intentos, si tiene un fallo de clave hago un update para sumar un intento fallido... mi gran problema se da en la SEGURIDAD del DATO PASSWORD.. verán porque en el código.

Código PHP:
//recibo los datos ya validados por JS
$email $_POST["email"];
$clave $_POST["password"];

//como ejemplo, verifico si el mail existe
$sql_login="SELECT * FROM users WHERE emailUser = :email";    
$resultado_login $dbcon->prepare($sql_login);
$resultado_login->bindParam(':email'$emailPDO::PARAM_STR);
$resultado_login->execute();

if(
$resultado_login->rowCount() == 1){
        echo 
"hay este mail<br>";
//busco los datos del user si existe
        
$fila_usuario=$resultado_login->fetch();

        if(
$fila_usuario['intentos'] < 5){ echo "es menor a 5 intentos<br>";

            
//ACA ESTA MI PROBLEMA... se dan cuenta que no BLINDÉ mi clave?
            
if($fila_usuario['pass']== $clave){
//logue al usuario
            
}else{
//hago un update para aumentar los intentos
$sql_in"UPDATE users SET ultimointento=NOW(), intentos=intentos+1 WHERE idUser = :idUser";
        
$insert$dbcon->prepare($sql_in);
        
$insert->bindParam(':idUser' $fila_usuario['idUser'], PDO::PARAM_INT);
        
$insert->execute();

            }

        }else{
//aqui hago el proceso de bloqueo si es que no ha pasado el tiempo de baneo
        
}


}else{
            echo 
"<div class='campo_error'>
            <img src='login_temp/wrong.png' />
            La direcci&oacute;n de email ingresada no est&aacute; registrada
            </div>"
;

En la descripción explico el problema, que es.. al hacer el select para traer los datos del user, uso el email, y ese dato va protegido, luego verifico si la CLAVE es correcta, pero el parámetro de la CLAVE, no lo pude proteger para verificar.

Por qué no verifico ambos a la vez en el login? Porque la idea es bloquear el ID del usuario cuyo mail esté siendo utilizado con reiterados fallos en la clave, y para obener el ID es necesario que el mail sea esté registrado y a partir de ahi generar las verificaciones...

Podría validar ambos, a la vez, pero ya no sabría qué bloquear, pues, si falla la dir de email, puede que solo no esté registrada o fallos de escritura, pero cómo bloqueo a un usuario cuyo mail no existe?

Cómo puedo blindar el parámetro de CLAVE siguiendo esta estructura, ya que meter mysql_real_escape_string no es una opcion válida en PDO? O tendría que hacer un Select primero para ver si el mail está registrado, y luego otro Select para verificar si tanto el email como el password coinciden? Aunque me parece redundante.

Por favor ayúdenme.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 30/09/2014 a las 15:07
  #2 (permalink)  
Antiguo 30/09/2014, 15:09
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validar mail y password con PDO - Pequeño inconveniente

Cita:
Podría validar ambos, a la vez, pero ya no sabría qué bloquear, pues, si falla la dir de email, puede que solo no esté registrada o fallos de escritura, pero cómo bloqueo a un usuario cuyo mail no existe?
No puedes, es simple: no existe y por lo tanto no hace falta validar nada extra.

Cita:
Cómo puedo blindar el parámetro de CLAVE siguiendo esta estructura, ya que meter mysql_real_escape_string no es una opcion válida en PDO?
PDO provee sus propios mecanismos, que es cuando usas bindParam(), consulta el manual.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 30/09/2014, 15:17
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Respuesta: Validar mail y password con PDO - Pequeño inconveniente

Pero tú eres [email protected] y estás registrado, si no existes, no me interesas.. pero si existes, quiero saber si es que metiste mal tu clave reiteradas veces.. si lo hago asi no voy a saber que usuario bloquear:
Código PHP:
Ver original
  1. $result = $conn->prepare("SELECT * FROM users WHERE username= :hjhjhjh AND password= :asas");
  2. $result->bindParam(':hjhjhjh', $user);
  3. $result->bindParam(':asas', $password);
  4. $result->execute();

por la simple razón que me dará FALSE si el user o el password no son correctos.. sin embargo, si primero verifico el mail, puedo saber si existe o no, y luego veo si anda metiendo mal su CLAVE... ese es mi problema.. veré si bindParam() lo puedo usar posterior... pero de por sí ya no puedo, ya que la consulta SQL fue hecha, entonces me quedo con la interrogante de cómo bloqueo al user por X tiempo... se me ocurre hacer doble select.. uno para ver si existe el mail, y otro para ver si el mail y la clave son correctos, pero me parece redundante, pero solo así podré banear a un user por su ID por intentos fallidos de clave por 24 o 70 horas.
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Última edición por loncho_rojas; 30/09/2014 a las 15:28
  #4 (permalink)  
Antiguo 30/09/2014, 15:34
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validar mail y password con PDO - Pequeño inconveniente

Pues yo pienso que tu estrategia original es correcta, jamás he dicho lo contrario.

Probablemente no puedas usar la consulta anterior, pero, ¿qué problema hay en crear otra consulta?

No entiendo el inconveniente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 30/09/2014, 15:43
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 5 meses
Puntos: 175
Respuesta: Validar mail y password con PDO - Pequeño inconveniente

Claro que es válido, sólo que me pareció una manera no muy eficaz.

Si por ejemplo usaba la librería MYSQL de PHP bastaba con poner a los dos parámetros, por ejemplo nada mas, el mysql_real_escape_string() y los usaba libre en cualquier parte... al pasar a PDO me quedé limitado, o tal vez hay una manera de banear al user, quizá utilizando PDO pero con POO sea más factible de manejar, pero por tiempos y demás creo que tendré que utilizar esta estrategia, ya que todo el código me vino incrustado en la página y en PHP 5 pero con librerías MYSQL, mi tarea es pasarlo a PDO literalmente..

__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...

Etiquetas: inconveniente, mail, mysql, password, pdo, pequeño, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.