En un sitio web que ejecuto, he implementado este procedimiento para la recuperación de la cuenta (procedimiento de contraseña olvidada). Me gustaría saber si hay algún problema con él que no haya visto, que lo haga inseguro.
Cuando el usuario crea una cuenta, debe ingresar una contraseña (por supuesto) y una dirección de correo electrónico. También se les pide que seleccionen una "pregunta secreta" de una lista de unas 20 preguntas y que ingresen una "respuesta secreta" a esa pregunta. La contraseña y la respuesta secreta de question están en hash, cada una con una sal diferente, aleatoria. Supongamos que la función de hash utilizada es adecuada. (El usuario puede cambiar su correo electrónico, contraseña y / o pregunta / respuesta secreta en cualquier momento, debe ingresar la contraseña para hacerlo. No impongo ningún requisito de seguridad de contraseña, excepto un requisito de longitud mínima).
Si el usuario necesita recuperar la cuenta, accede a la página de recuperación de cuenta e ingresa su nombre de usuario. Se envía un correo electrónico a la dirección de correo electrónico asociada a su cuenta. Este correo electrónico contiene un enlace que contiene un código generado de forma aleatoria (site.com/accountrecovery?user=1234&code=bryvthery6y65htee o similar). Cuando el usuario hace clic en el enlace, regresa al sitio y, asumiendo que el código lo comprueba, lo lleva a una página donde se le hace la pregunta secreta, debe responderla y, al mismo tiempo, ingresar una nueva contraseña. / p>
Siempre que se cambie la contraseña almacenada o la respuesta secreta, con cualquier método, se genera un nuevo salt aleatorio para él.
¿Hay algún problema con esta configuración que me viene a la mente? Me gustaría una crítica constructiva. La idea detrás de esto es que para poder restablecer la contraseña, el usuario debe tener acceso a la dirección de correo electrónico registrada y debe conocer la respuesta secreta.