Restablecimiento de contraseña Reenvío de URL

1

Si un usuario registrado anteriormente hace clic en el botón para restablecer la contraseña durante el inicio de sesión, deseo enviarles un correo electrónico con un enlace para restablecer la contraseña.

Tengo tres consultas:

  1. ¿Cómo agregar una fecha de caducidad al enlace de la URL?

  2. ¿Cómo estructurar la URL? Anteriormente no había hasheado las contraseñas y envié un enlace "haga clic aquí" con

    https://www.example.com/?login&EMAIL=website&PASSWORD=text-password&LOGIN=1&PATH=2

    Ahora he hecho un hash de todas las contraseñas, ¿cómo estructuro la URL? ¿Sigo incluyendo email&hashedpassword como arriba o hash la URL completa?

  3. Noté con un sitio muy conocido en el Reino Unido que cuando mi esposa solicitó que se restableciera mi contraseña, quiero que me envíen la URL de restablecimiento, pero porque una de mis direcciones de correo electrónico se reenvía automáticamente al correo electrónico de mi esposa, ella pudo restablecer mi contraseña e iniciar sesión en mi cuenta. Obviamente no me molesta demasiado en este caso, sin embargo Conozco a muchas personas que reenvían automáticamente sus correos electrónicos personales a las direcciones de correo electrónico del trabajo, por lo que técnicamente alguien podría usar una URL de restablecimiento de contraseña para hackear una cuenta.

¿Hay una forma de evitar esto ... por ejemplo, cuando envía la URL de restablecimiento de contraseña, solo "funciona" si se hace clic desde el cliente de correo con esa dirección de correo electrónico?

    
pregunta Jason 19.11.2015 - 11:52
fuente

2 respuestas

6
  1. No hagas esto. Agregue la caducidad a la base de datos y verifique si el token sigue siendo válido. Si lo agrega a la URL, está invitando a personas a modificarla.
  2. ¿Por qué estás enviando una contraseña? La mejor práctica de la industria es enviar un token de uso único y de corta duración que lleve a los usuarios a una página que permita el ingreso de una contraseña y una confirmación de contraseña, luego los envía a la página de inicio de sesión de la aplicación para usar la contraseña recién ingresada para iniciar sesión. De esa manera, evita enviar contraseñas desde su servidor, lo que significa que solo el compromiso de algún tipo con el servidor revelará cualquier contraseña, ya sea que el usuario o el sistema la genere.
  3. Realmente no hay un concepto de "cliente de correo con esa dirección de correo electrónico"; por ejemplo, tengo una cuenta de correo electrónico a la que accedo desde navegadores web en varias computadoras, un cliente de correo electrónico en mi computadora personal y un cliente de correo electrónico en mi telefono. También accedo a otras direcciones con esos mismos clientes. La forma general de garantizar que solo el usuario pretendido puede utilizar dichos enlaces es mantener el período de validez lo más breve posible, como máximo una hora. Puede haber algunos usuarios cuyo correo electrónico demore más que eso en llegar, pero recuerde que están intentando iniciar sesión en ese momento. Si les dice que ha enviado un correo electrónico, es probable que vayan a buscarlo.
respondido por el Matthew 19.11.2015 - 12:15
fuente
1

No escribas a la db si puedes evitarlo. El rastreador de errores de Mozilla fue pirateado con un restablecimiento de contraseña al escribir incorrectamente en la base de datos.

Utilice un HMAC. Ponga el tiempo de caducidad en el HMAC. Ponga el HMAC y el tiempo de caducidad en la url. Compruebe la HMAC a petición.

Aquí hay una guía, incluida la protección de repetición . enlace

    
respondido por el Neil McGuigan 20.11.2015 - 07:10
fuente

Lea otras preguntas en las etiquetas