¿Es mala la práctica de enviar por correo electrónico?

28

En mi aplicación Spring, planeaba eliminar las contraseñas del proceso de autenticación al enviar un "enlace de inicio de sesión mágico" a la dirección de correo electrónico de un usuario. Sin embargo, en esta pregunta Rob Winch (líder de Spring Security) dice lo siguiente:

  

Tenga cuidado de saber lo que está haciendo en términos de permitir el inicio de sesión   desde un enlace dentro de un correo electrónico. SMTP no es un protocolo seguro y por lo tanto   Por lo general, es malo confiar en que alguien tenga un correo electrónico como una forma de   autenticación.

¿Es ese realmente el caso? Si es así, ¿cómo es más seguro enviar un enlace para restablecer la contraseña? ¿No es lo mismo iniciar sesión con un enlace mágico que enviar un enlace mágico para restablecer una contraseña?

    
pregunta Utku 15.01.2018 - 16:45
fuente

2 respuestas

29

Un enlace mágico por sí solo no es necesariamente malo. Un valor completamente aleatorio de 512 bits no será más fácil de adivinar que una clave privada de 512 bits. En general, se considera una buena práctica caducar después de un período de tiempo razonable. Un buen enfoque, que también evita tener que almacenar las entradas de la base de datos, es incrustar los datos del token en la url y firmarlos con una clave privada. Es decir,

site.com/login?type=login&user=[username]&expires=[datetime]&sig=[signature of other parameters].

Sin embargo, el correo electrónico como mecanismo de transmisión no es seguro.

Por defecto, SMTP ofrece muy poca protección contra la intercepción. El tráfico puede estar encriptado entre los servidores, pero no hay garantías. Incluso con el cifrado, a menudo es posible para el hombre en medio de la conexión (el cifrado no es lo mismo que la autenticación).

  

Si es así, entonces, ¿cómo es más seguro enviar un enlace para restablecer la contraseña?

No lo es. Es por esto que varios servicios solicitan una prueba adicional suya antes de enviar el enlace (o después de hacer clic en él).

    
respondido por el Hector 15.01.2018 - 16:51
fuente
21

Hay tres problemas aquí.

  1. Como escribe la documentación, el correo electrónico no es un protocolo seguro. Los correos electrónicos son stord en texto plano en los servidores de correo. El cifrado entre servidores y entre servidores y clientes es opcional y está fuera de su control. Y es muy probable que no se encuentre en un escenario en el que pueda utilizar cualquiera de los sistemas opcionales de cifrado de extremo a extremo que las personas construyen sobre el correo electrónico (PGP, S / MIME, etc.). Por lo tanto, no puede garantizar que nadie, excepto el destinatario, verá el correo electrónico en texto simple.
  2. Los secretos no pertenecen a las URL. Las URL aparecen en los historiales del navegador, en las cachés de proxy, en los registros del servidor y en muchos otros lugares donde no desea que aparezca información secreta.
  3. Los usuarios saben cómo funcionan las contraseñas. No fue fácil, pero después de una larga lucha finalmente conseguimos en la cabeza de todos que las contraseñas deben mantenerse en secreto. Con su sistema, es posible que los usuarios no sepan cuál es el secreto relevante para la autenticación con su servicio. Eso hace que sea probable que manejen mal esa información y sean susceptibles a ataques de ingeniería social.

Si envías enlaces con un token de inicio de sesión secreto con correo electrónico, deben ser de un solo uso y caducar con bastante rapidez.

    
respondido por el Philipp 15.01.2018 - 17:27
fuente

Lea otras preguntas en las etiquetas