Ver Mensaje Individual
  #34 (permalink)  
Antiguo 14/12/2012, 17:13
Montes28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Como recuperar password en sistema que gestiona cuentas de usuarios

en respuestas anteriores me indicaste usar el hash (crypt) y un token y me acabas de recomendar otra cosa me confundi un poco , necesito lo que sea mas seguro y que sea de una manera elegante y funcional.

Cita:
un formulario me parece mejor y una caducidad al link que envias por email

y antes de enviar el email un formulario donde el usuario introduzca el nombre de usuario y el email y si coinciden se envia si ha olvidado el usuario y por consiguiente no coinciden ¡ un form donde ponga el email y se envia el usuario

en el momento que coinciden se envia el email y se guarda la clave aleatoria en la bd para despues verificar , tambien se deberia guardar la hora de el envio y pasarlo tambien en el link , una vez el user haga clik en el link del email se verifica la hora y si pasa mas de 3 horas por ejemplo se le dice que vuelvo a pedir otro email que ese caduco si esta bien la hora se comprueba la pass del link con la pass de la bd y si esta bien muestras el form para que ponga su nueva contraseña

Cita:
como no vas a dar la opcion de recuperar la contraseña antigua podemos usar un hash de una sola via de un sentido sin vuelta

te recomiendo : crypt en lugar de md5 muy inseguro

http://es.php.net/manual/es/function.crypt.php

una cosa que ami personalmente me gusta es poner una tabla con los campos user y pass , el pass hasheado con crypt y el usuario igualmente , y te preguntaras como muestro el usuario entonces ¿? otra tabla con los datos del usuario ,en el momento del registro guardamos el user hasheado en la tabla de login por ejemplo y el pass , el user sin hashear en la tabla de los datos

a tus preguntas:

obvia lo de guardar la hora en la bd (no es necesario)

en el momento de envio del email se manda en el link para su posterior comprobacion el time() justo en el momento del envio con time()

una vez el user haga clik en el link se envia a una pagina donde deberas verificar que el campo time no ha superado el tiempo que tu creas conveniente como para caducar

link

verify_account.php?pass=nvujnervnruineinrveriegnre oivns&time=time()

en el momento del clik

verificamos si existe pass y time

y ya verificamos la caducidad

Código PHP:

Ver originalCopiar

if($_GET['time'] )

$controlador = 3600; //sg 1 HORA DE CADUCIDAD
$controlador_final = $_GET['time'] + $controlador ;
$time_actual= time();

if($controlador_final >= $time_actual)
{

ahora verificamos el password con el de la bd

}else{

echo 'link caducado';

}





ademas de todo esto pondria una capa de seguridad extra con un token , ninguna medida esta de mas