¿Cuándo, exactamente, se deben eliminar los tokens antiguos de restablecimiento de contraseña?

8

Estoy tratando de descubrir las mejores prácticas para trabajar con tokens de restablecimiento de contraseña.

Digamos que un usuario inicia el proceso de restablecimiento de la contraseña y luego se les envía por correo electrónico el token de restablecimiento y almacenamos una copia de hash en la base de datos. El token lleva la marca de tiempo en nuestra base de datos y se considerará caducado en, digamos, 24 horas.

Ahora considere dos escenarios para lo que podría suceder a continuación:

1) El usuario piensa que no recibió el correo electrónico, intenta restablecerlo nuevamente. ¿Debemos permitirle que genere otro token? Si lo hacemos, ¿deberíamos eliminar el token antiguo inmediatamente? (Todos ellos serán inválidos a partir de las 24 horas posteriores al problema datetime ...) Creo que minimizaría las llamadas de soporte si permitimos un poco de flexibilidad siempre y cuando expiren. ¿Hay algún tipo de ataque que no esté considerando aquí?

2) El usuario recibió el correo electrónico y hace clic en el enlace de restablecimiento, pero no completa el formulario de restablecimiento. ¿Cuándo debo eliminar el token de reinicio? Solo después de un restablecimiento exitoso, el usuario puede hacer clic en el enlace una y otra vez durante las 24 horas y solo se vuelve inválido una vez que finalmente restablece la contraseña. ¿O debería eliminar el token tan pronto como haga clic en el enlace para algún problema de seguridad? (todo esto ocurre antes de la expiración)

    
pregunta John 25.02.2013 - 21:28
fuente

2 respuestas

8

No debe restablecer el token cuando el usuario hace clic en él, ya que el usuario podría verse afectado en el proceso (por ejemplo, su gato saltó en el teclado; el mío lo hace de forma muy regular).

(Hace dos días estaba usando un enlace de este tipo, no para restablecer la contraseña, sino similar, que se desactivó tan pronto como lo hice clic en él, y resultó que la página que estaba detrás no era compatible con Chrome. Así que tuve que solicitar un nuevo enlace, hacer todo el proceso una vez más, y los maldije por eso. Cuando se trata de contraseñas, quiere y necesita hacer un aliado cooperativo del usuario, y ciertamente no para enfadarlo. )

Cuando la contraseña se restablece realmente, todos los enlaces de restablecimiento de contraseña pendientes deben estar desactivados. Es más sencillo si solo permite restablecer un enlace a la vez; Si el usuario solicita un restablecimiento de la contraseña mientras el enlace anterior aún es válido, simplemente envíelo nuevamente (posiblemente, reinicie el contador de tiempo de espera). No es necesario admitir varios enlaces de restablecimiento de contraseña distintos válidos simultáneamente. Un enlace a la vez significa un diseño de base de datos más sencillo y, por lo tanto, menos posibilidades de errores.

    
respondido por el Tom Leek 25.02.2013 - 21:36
fuente
0
  • sugeriría permitir que el usuario solicite un restablecimiento de la contraseña solo una vez para que tenga solo un token de restablecimiento a la vez.
  • Siempre puede realizar un seguimiento si el correo se envió correctamente y solo luego almacenar el token de restablecimiento en la base de datos.
  • Si el usuario intenta hacerlo de nuevo (y hay un enlace de restablecimiento activo) notifica al usuario que dice que "el enlace de restablecimiento ya está enviado".
  • Acerca de la eliminación de los tokens de contraseña: deben eliminarse al instante después de que la contraseña se haya restablecido con éxito y no después de hacer clic en el enlace del resto.
  • Una posible alternativa es restablecer la contraseña del usuario y actualizarla en la base de datos. Envíe un correo al usuario notificando que "esta es su nueva contraseña cámbiela inmediatamente
  • Tenga en cuenta que el proceso de restablecimiento de la contraseña siempre será vulnerable si la comunicación por correo electrónico no está encriptada. Al limitar el tiempo la URL de restablecimiento, se puede intentar minimizar la ventana de ataque para un posible ataque.
respondido por el Shurmajee 26.02.2013 - 08:07
fuente

Lea otras preguntas en las etiquetas