Cuando alguien ha perdido una contraseña, hace clic en el enlace de contraseña perdida u olvidada. Tendrán que ingresar su dirección de correo electrónico, y luego responder su propia pregunta secreta si la pregunta secreta es correcta, se les enviará un correo electrónico con un enlace que caduca después de 24 horas.Revise mi diseño: instalación de restablecimiento de contraseña para el sitio web
A medida que se envió el correo electrónico, un registro se introduce en una tabla de base de la celebración de esta información: - el correo electrónico de la persona que necesita para restablecer la contraseña - la hora, que el restablecimiento de la contraseña caducará - la hora en que se presentó la solicitud de reposo de la contraseña.
El enlace enviado llevará al usuario a un formulario que le permite ingresar su nueva contraseña. En este formulario, deberán ingresar su dirección de correo electrónico y su contraseña X2.
Al hacer clic en enviar, se comprueba si el correo electrónico es válido (uno que la contraseña se restablece) y aún no ha expirado (comparando las dos fechas para ver si el tiempo de caducidad ha pasado, que es 24 horas)
Si el correo electrónico es válido, y aún no ha expirado, y las dos contraseñas coinciden con & cumplen con la req mínima, se aplica la nueva contraseña.
Aparece un mensaje de confirmación cuando tiene éxito.
Q1. ¿Es este un buen modelo para la recuperación de contraseñas? Q2. ¿Cómo puedo asegurarme de que el enlace que se envía a la dirección del usuario sea único? ¿En que nadie obtendrá el mismo enlace? Para que nadie pueda ir a la página de restablecimiento de contraseña y probar diferentes correos electrónicos, sino que cada cuenta que debe restablecerse tenga su propia URL única que funcione solo para esa cuenta.
En cuanto a la Q2:
Estaba pensando que cuando el usuario solicita que tienen su restablecimiento de contraseña, se genera un identificador único al azar y se almacena en el mismo registro que expira después de 24 horas. columna Esta aleatoria de identificador único que se podría llamar "deshacerse"
El enlace en el correo electrónico que se envía al usuario terminará con? rid = xxxxxxxxxxxxx
Cuando el usuario hace clic en Enviar en la página que se restablece el contraseña, el "deshacer" en la parte superior de la página se utiliza para obtener la dirección de correo electrónico correspondiente de la base de datos, para compararla con la dirección de correo electrónico en el formulario. Hacer esto puede garantizar que cada caso de restablecimiento de contraseña tendrá su propia URL única que ninguna otra cuenta puede usar para restablecer su contraseña.
¿Es esta una solución viable?
Cualquier contribución o sugerencia será apreciada.
+1: odio las preguntas secretas ... antes que nada, proporciono la respuesta y termino luego publicándola en Facebook en mi buzón de información, etc. Cosas como "apellido de soltera de mi madre" o "ciudad donde crecí" "es simplemente demasiado fácil de investigar". En segundo lugar, rara vez recuerdo la respuesta que proporcioné ... Básicamente, siento que socava la seguridad de tener una contraseña segura. Además, ya sabes que el correo electrónico es legítimo (ya que es con lo que se registró), ¿por qué no enviar un enlace de correo electrónico para restablecer, etc. – Adam
¿Qué falla ves? Enviar una contraseña aleatoria que sea buena para un inicio de sesión, o un enlace aleatorio que sea bueno para un inicio de sesión tiene aproximadamente la misma seguridad. La principal ventaja del enlace es que el usuario simplemente puede ignorar las solicitudes de restablecimiento falsas. Si envía una contraseña aleatoria, deben tomar medidas (volver a cambiar la contraseña) para solicitudes falsas. Tampoco creo que tener dos contraseñas a la vez sea una buena idea. Eso aliviará los ataques de fuerza bruta, solo levemente, pero aún así. Siempre que el usuario controle su correo electrónico, no tiene que preocuparse por restablecimientos falsos. –
@Matthew Flaschen: el error es que se solicita al usuario que ingrese una contraseña. Es bastante extraño para mí tanto como usuario como desarrollador. Como usuario, esperaría que me enviaran una nueva contraseña. Como desarrollador, no me gusta la idea de tener lo mismo dos veces: ¿tendría una verificación de seguridad con contraseña o un control de datos enviado en tres páginas (registro + perfil + cambio de contraseña)? Generar una contraseña aleatoria no aumentará el riesgo de fuerza bruta si la contraseña es lo suficientemente larga. Y lo que es malo con las solicitudes falsas no es una cuestión de seguridad, sino que el usuario se enojará si recibe demasiados correos. –