"Olvidé mi contraseña" - ¿Cómo manejar esto?

18

Leí esta respuesta y encontré un comentario que insiste en no enviar la contraseña por correo electrónico:

las contraseñas no deberían poder recuperarse por correo electrónico, lo odio. Significa que mi contraseña se almacena en texto plano en alguna parte. solo debe reiniciarse.

Esto me plantea la cuestión de manejar la opción ¿Olvidé mi contraseña?

A cualquier costo, la contraseña sin formato debe mostrarse en cualquier interfaz de usuario para que el usuario pueda leerla. Entonces, ¿cuál sería la forma de manejar "Olvidé mi contraseña"

Gopi
fuente
Acabo de pasar 15 minutos explicando la función de contraseña olvidada de PHPBB.
Peter Turner el
Posible duplicado del proceso de restablecimiento
mosquito
1
@gnat ¿Tuviste la oportunidad de comprobar cuál era el más viejo de los dos?
Gopi
1
@TechJerk la edad de las preguntas no importa como se explica aquí
mosquito

Respuestas:

35

Un buen diseño de aplicación no podrá recuperar explícitamente una contraseña de usuario. Esto se debe a que generalmente se almacena después de ejecutarse a través de algún tipo de hash, que es una operación unidireccional.

La mejor manera de manejar la contraseña perdida es realizar un restablecimiento, enviar un correo electrónico a la cuenta de los usuarios con un enlace con un parámetro generado agregado que lo identifica como un restablecimiento de contraseña válido para la cuenta en cuestión. En este punto, pueden establecer una nueva contraseña.

Esto supone que tiene una dirección de correo electrónico de usuario en el archivo.

Chris
fuente
Existen "mejores prácticas" adicionales que, aunque no son críticas (como no almacenar las contraseñas en primer lugar), deben estar en su lugar si el tiempo lo permite, incluido el hecho de que el token de acceso temporal caduque en ciertos eventos y con el tiempo (para que la cuenta de alguien no se ve comprometido si su bandeja de entrada es).
Steven
7

No debe almacenar la contraseña principal del usuario como texto sin formato, pero PUEDE almacenar una contraseña temporal como texto sin formato, es decir

el usuario restablece la contraseña -> se crea la contraseña temporal -> la contraseña temporal se envía por correo electrónico -> el usuario se ve obligado a cambiar la contraseña en el próximo inicio de sesión (la nueva contraseña no puede ser una contraseña temporal tal vez)

Viper_Sb
fuente
2
He hecho esto en varios sitios. Si bien puede argumentar que un intruso de correo puede obtener la contraseña, también puede obtener cualquier otro token temporal, etc., que enviaría por correo electrónico. Este enfoque es más simple para el usuario (puede copiar y pegar o incluso escribir la contraseña temporal) y no recibe un golpe de seguridad.
Kate Gregory
A menos que alguien esté utilizando una forma segura de conectarse al servidor de correo (es decir, correo web a través de HTTPS o POP3 a través de TLS), dicha comunicación podría ser fácilmente detectada. En ese caso, algunos "haX0r" podrían iniciar sesión fácilmente en la cuenta de otro usuario. Por eso es mala idea. El enlace de restablecimiento se debe enviar como Chris sugiere y se debe hacer una pregunta de seguridad antes de permitir que el usuario cambie su contraseña. Todavía no es 100% seguro (ya que muchas veces las respuestas a tales preguntas de seguridad podrían adivinarse fácilmente), pero no puedo ver una solución mejor.
Paweł Dyda
2
@Pawel Dyda Un enlace de reinicio también puede ser rastreado, si su correo electrónico está siendo rastreado, creo que tener una contraseña temporal en su correo electrónico es la menor de sus preocupaciones.
Viper_Sb
Por eso escribí sobre la pregunta de seguridad.
Paweł Dyda
5

El comentario está en contra de enviar la contraseña original por correo electrónico, no enviar nada por correo electrónico. Si la institución puede enviar la contraseña original, eso significa que la tienen, y eso es un problema de seguridad. El comentarista no argumentó en contra de enviar una contraseña por correo electrónico, porque eso es bastante necesario en la mayoría de los casos.

La forma correcta es asignar una nueva contraseña que se pueda usar una vez, por cualquier motivo. Tal vez ya esté marcado como caducado por el sistema, tal vez solo inicie sesión en una página para cambiar la contraseña que se genera dinámicamente una vez y solo una vez, lo que sea.

David Thornley
fuente
4

Lo que más me gusta es que la aplicación envíe un correo electrónico al usuario en la dirección de correo electrónico registrada con un enlace único válido durante X horas que proporciona una página "Cambiar contraseña".

Luego, el usuario puede establecer la contraseña como desee sin arriesgarse a que sea puesta en un correo electrónico.


fuente
4

El proveedor de mi tarjeta de crédito tiene una opción de "contraseña olvidada" que le hace algunas preguntas de seguridad (esto no es inmensamente seguro en sí mismo, pero muchos bancos lo hacen) y luego genera un nuevo código y le da la mitad en la pantalla y envía correos electrónicos la segunda mitad tú. De esa manera no puede romper la cuenta sin tener acceso tanto a la página web como a la dirección de correo electrónico.

He preguntado un poco sobre esto desde una perspectiva de usabilidad hace un tiempo.

glenatron
fuente