¿Enviar un código de recuperación de contraseña por correo electrónico es tan malo como enviar una contraseña por correo electrónico? [duplicar]

4

Estoy creando una aplicación móvil en la que mi función de recuperación de contraseña implica enviar un código de recuperación de contraseña (cadena generada de forma aleatoria) a la dirección de correo electrónico del usuario. Obtienen el código, luego lo ingresa dentro de la aplicación. Los servicios web comprueban si el código es válido (caduca a las 24 horas) y si es así, la aplicación lleva al usuario a actualizar su contraseña.

Utilizaría un enlace para restablecer la contraseña, pero no soy muy bueno en programación y estoy buscando alternativas por ahora.

En términos de seguridad, ¿enviar el código aleatorio al correo electrónico del usuario es tan malo como enviar la contraseña por correo electrónico? ¿Aunque usaré el cifrado Blowfish para cifrar el código cuando esté almacenado en la base de datos?

Para aclarar esto, pregunte sobre el envío de códigos / tokens de recuperación de contraseñas y no sobre contraseñas

    
pregunta Theman 17.03.2016 - 19:03
fuente

3 respuestas

4

No, no es tan malo. Personalmente, no soy un gran fanático del uso del correo electrónico como mecanismo de recuperación de contraseña solo porque hay muchos "qué pasaría si", pero muchos los sitios respetables lo hacen, por lo que encoge de hombros .

El motivo por el que no es tan malo es que si envía una contraseña por correo electrónico, el atacante tendrá acceso silencioso a la cuenta y el usuario no sabrá nada. Y como @drewbenn señala, también compromete a todos los demás sitios para los que el usuario usa la misma contraseña, ayuda a los atacantes a crear diccionarios sobre patrones de contraseña (si los hay), etc. Con un código de recuperación, el código debe ser de un solo uso. y el usuario sabrá muy rápidamente si ya se ha utilizado.

    
respondido por el Mike Ounsworth 17.03.2016 - 19:11
fuente
1

Creo que estás haciendo la pregunta incorrecta. Esto fue mencionado en los comentarios sobre su pregunta; confirmó que está preguntando si desea enviar un código de restablecimiento en lugar de enviar la contraseña original en texto sin formato.

Si incluso puede enviar su contraseña al usuario, entonces su código no es seguro. Nunca debe poder recuperar una contraseña de usuario si está haciendo las cosas correctamente. Debe tener un hash lento y unidireccional de la contraseña almacenada, junto con un salt. No es posible recuperar una contraseña de texto sin formato de un hash unidireccional lento. Ese es todo el propósito de usarlos.

Así que diría: es definitivamente más seguro enviar un código de restablecimiento en un correo electrónico que una contraseña de texto simple. Porque, si puede enviar una contraseña de texto simple, su sistema es necesariamente inseguro por ese mismo hecho. Pero hay formas de enviar códigos de reinicio sin que todo tu sistema sea defectuoso, así que al menos si lo haces, hay esperanza de seguridad.

    
respondido por el Ben 17.03.2016 - 19:56
fuente
0

La forma en que se almacena el código en la base de datos es (casi) completamente irrelevante dada la naturaleza transitoria de estos códigos, especialmente porque si alguien ya tiene acceso a su base de datos para encontrar estos valores, probablemente podrían causar mucho más daño que solo restablecer las contraseñas de las personas; son solo un poco más "peligrosos" que saber el nombre de inicio de sesión de un usuario. Enviar el valor en texto sin formato es perfectamente correcto, siempre y cuando caduque una vez que la contraseña se haya cambiado correctamente o el temporizador caduque (24 horas, como se ha señalado). Desde una perspectiva de UX, sugeriría que no caduque el ticket hasta un cambio exitoso, ya que una conexión de red deficiente podría hacer que el ticket no sea válido sin que el usuario pueda restablecer su contraseña. Por supuesto, usted querría enviar un correo electrónico y preferiblemente una segunda comunicación (por ejemplo, SMS) una vez que cambie la contraseña.

    
respondido por el phyrfox 17.03.2016 - 19:16
fuente

Lea otras preguntas en las etiquetas