Tener un valor booleano configurable por el usuario para "restablecer permitido".
Si tiene su correo electrónico / algún medio fuera de banda para comunicarse con el usuario final
Cuando el usuario haga clic en el enlace "Olvidé mi contraseña", si el "restablecimiento permitido" es verdadero, envíe un enlace de restablecimiento de contraseña a la cuenta de correo electrónico asociada con la cuenta de usuario. Asegúrese de utilizar un servicio de correo electrónico que intente primero el cifrado de extremo a extremo (de modo que, si su servidor de correo lo admite, el enlace nunca se envíe de forma simple. Y si su servidor no lo admite, no lo son). t negó el enlace).
Límite de velocidad la cantidad de veces que se puede enviar un correo electrónico a la misma cuenta (por ejemplo, 2 restablecimientos por día) para que alguien no pueda usarlo para enviar correo no deseado a la cuenta. No permita que el usuario sepa si se ha enviado un correo electrónico o si la cuenta que mencionaron existe.
Si no hacen clic en el enlace para restablecer la contraseña, nada debería cambiar. Si hacen clic en él después de un cierto período de tiempo de espera, o si entre el correo electrónico que se envía y el momento en que se hace clic en "reiniciar permitido" se ha establecido en falso, no debería ocurrir nada.
Si no tiene un medio de comunicación fuera de banda
Si se configura el "restablecimiento permitido", use un mecanismo de respuesta-desafío, como preguntas de seguridad configurables por el usuario. Si responden las preguntas correctamente, permítales ingresar una nueva contraseña. Es posible que también desee considerar el hashing de las respuestas.
Por supuesto, también puede usar algo como TOTP , pero es probable que lo hagan. t tiene la contraseña, tampoco tendrán la clave necesaria para esto.
De cualquier manera
Realice todo el intercambio a través de un canal encriptado. A menos que esté intentando impedir que la NSA robe credenciales, SSL debería ser suficiente.