2010-01-02 20 views
8

sitio web neto, me gustaría implementar Olvidé mi contraseña. Estoy utilizando los pasos siguientesLa mejor manera de hacer código para "Contraseña olvidada"

  1. forma que tiene cuadro de entrada para la identificación de usuario y correo electrónico de identificación y de CAPTCHA
  2. cuando el usuario introduce datos y presentar, en el back-end después de la validación se genera nueva contraseña y se sustituye la antigua contraseña en la base de datos.
  3. New passowrd se envía al usuario por correo electrónico.

Por favor, ayúdenme si estoy haciendo lo correcto o no?

¿Hay algún otro mecanismo seguro para la misma?

[EDIT] Gracias, recibí su respuesta. Realmente este es un mecanismo seguro. Pero aquí tengo pocas dudas

  1. ¿Qué mensaje debo mostrar al usuario cuando ingrese loginId y la dirección de correo electrónico en la página de contraseña olvidada?
  2. Si el mensaje sería el mismo para un usuario válido y un usuario malicioso?
  3. ¿Ventajas de utilizar token CSRF? Cualquier ayuda/enlace
  4. Cuando el usuario hace clic en el enlace, ¿qué debo hacer? porque como supongo que el usuario debe iniciar sesión automáticamente en su cuenta, y luego tengo 2 opciones (primero) enviar una nueva contraseña automáticamente al usuario (segunda); ¿se mostrará al usuario un nuevo usuario que enetrará la contraseña anterior y la contraseña nueva dos veces?

Por favor ayuda?

Respuesta

12

Puedo ver por qué querría un CAPTCHA, pero tomaría un enfoque diferente.

  1. Cuando se solicita un restablecimiento de contraseña de verificación que un reinicio ya no se ha solicitado para esa cuenta dentro de los últimos X minutos. Si ya se ha solicitado una contraseña, ignore la solicitud de restablecimiento.
  2. Compruebe la IP que solicita el restablecimiento de la contraseña. Si esa IP ha solicitado un restablecimiento de contraseña en el último Y minutos, ignore la solicitud.
  3. Si los controles en 1 & 2 pase comprobar la cuenta existe. Si no ignora la solicitud.
  4. Si hemos llegado hasta aquí, generemos un token de una vez, que vence en Z minutos y una URL de restablecimiento de contraseña que incluye este token. Envíe esto por correo electrónico a la dirección de correo electrónico registrada. Cuando se carga la URL, solicita una nueva contraseña y restablece.

Para aquellos que creen que debe decirle al usuario dónde se ha ido el correo electrónico Estoy totalmente en desacuerdo. Esto es "filtración de información", incluso si lo limita al nombre de dominio. Por ejemplo decir que me he registrado en JeffAtwoodEatsBabies.com como blowdart. Si Jeff hubiera solicitado un restablecimiento de contraseña para mí y usted mostró el dominio de registro, entonces vería idunno.org. Este es mi dominio personal y así Jeff sabría que el usuario de blowdart es, de hecho, yo. Esta es una cosa mala . No debería tener que registrarme usando hotmail o gmail o lo que sea para protegerme de su código que muestra un dominio de correo electrónico para todos.

Además no se debe mostrar mensajes de error en absoluto. No importa lo que suceda, un nombre de usuario no está realmente registrado, o se han realizado demasiadas solicitudes o el cielo ha caído, debería decirle al usuario que el procedimiento de restablecimiento de contraseña ha comenzado. Informar a un usuario que una cuenta no existe es más pérdida de información.

Una última cosa que podría hacer es agregar un token CSRF a la página de solicitud de restablecimiento, por lo que no puede ser conducido desde otros sitios web.

Seguimiento

Así que para responder a sus preguntas adicionales.

  1. Qué mensaje muestra es decisión suya. "Las instrucciones para restablecer su contraseña se han enviado por correo electrónico al correo electrónico registrado para esta cuenta" es una idea, pero realmente depende de su público.
  2. Ya mencionado anteriormente.
  3. Wikipedia es un buen starting point. Cómo lo hace depende de su plataforma y es una otra pregunta completa! Para ASP.NET usted podría mirar a mi proyecto CodePlex, http://anticsrf.codeplex.com o mirar en ViewStateUserKey.
  4. Cuando se haga clic en el enlace, primero validaría el token en la URL con el nombre de usuario al que se está aplicando, luego permitiría al usuario ingresar una nueva contraseña, o generar una nueva y enviarla por correo electrónico. No puede solicitar el anterior, ya que el punto es que el usuario lo ha olvidado.
+1

¿Qué pasa si un usuario genuino ingresa su información pero accidentalmente la escribe mal? ahora les ha dicho que su proceso ha comenzado y es posible que no se den cuenta de su error y se ocupen de sus asuntos, pero nunca reciben el correo electrónico y se preguntan por qué su sitio está dañado. – Jason

+0

Bueno, tienes que equilibrar la seguridad contra los usuarios malintencionados. Es solo una opción que el administrador del sitio puede hacer, pero en general, recomiendo que mis clientes estén del lado de la seguridad. Las filtraciones de información están en el Top 10 de OWASP; no son algo que deba tomarse a la ligera. – blowdart

+0

Por favor ayuda más? He editado mi publicación para mayor consulta. –

6

Hay muchas maneras en que esto se ha implementado. Como dijiste, generar un nuevo password y enviarlo a la dirección de correo electrónico registrada es un método. Sin embargo, no recomendaría que siguieras esa ruta, ya que mi contraseña se restablecería cada vez que alguien intentara adivinar mi contraseña.

En su lugar, lo mejor que he visto hasta la fecha es simplemente enviar por correo electrónico el correo electrónico registrado con un enlace que comenzará un proceso de restablecimiento de contraseña. Es posible incluso que el usuario sepa qué dirección de correo electrónico para verificar mostrando una versión enmascarada de su dirección de correo electrónico utilizada en el registro:

Un correo electrónico fue enviado a ******** @ hotmail.com. Por favor revisa tu bandeja de entrada para continuar.

Asegúrese de tener en cuenta los que pueden olvidar lo que dirección de correo electrónico se ha registrado en el - por lo general un par de preguntas de seguridad son una gran manera de hacer que la información disponible.

+1

+1 Considere al usuario registrado en [email protected] Cualquier preocupación de seguridad al decir "le enviamos un enlace por correo electrónico a la dirección de correo electrónico que utilizó ... comienza con foo @" ... comentarios sobre esta estrategia? –

+1

@pcampbell - +1 Me gusta mucho esta idea, ya que a veces quiero saber con qué correo electrónico me inscribí, pero creo que un mejor enfoque es proporcionar el nombre de dominio en lugar de la dirección de correo electrónico (@ hotmail.com, @yahoo. com, @ gmail.com) ya que creo que la mayoría de las personas probablemente tengan la misma dirección de correo electrónico, solo en diferentes proveedores. – Omar

+0

Me gusta ver una versión enmascarada de mi dirección de correo electrónico, en todo caso. Actualicé mi publicación para reflejar esto. – Sampson

4

Lo he hecho recientemente. Cuando el usuario ingresa su nombre de usuario o dirección de correo electrónico, generamos un token único y se lo enviamos por correo electrónico como parte de un enlace. Al recibir ese correo electrónico, hacen clic en el enlace y se conectan automáticamente, se llevan a la pantalla de mi cuenta y se les solicita que restablezcan su contraseña.

Por supuesto, esto depende 100% de la seguridad del cliente de correo electrónico, pero es difícil de superar desde una perspectiva de usabilidad.

+0

Esta es una gran solución, simplemente no olvides almacenar solo un hash de la contraseña y no la contraseña en texto plano. También debe quitar el captcha, ya que no es realmente necesario porque debe verificar la coincidencia entre el correo electrónico y el nombre de usuario. –

+0

Tengo algunas preguntas? 1. ¿Cuál es la ventaja de generar token único? 2. Si redirijo la página de usuario a la cuenta donde el usuario tiene que escribir una nueva contraseña, en este caso, ¿qué sucederá si genero contraseña automáticamente y envío un correo electrónico al usuario? ¿Cuál es la razón por la cual necesitamos generar token único y mostrar el formulario de cuenta al usuario para cambiar la contraseña? –

+0

La diferencia entre generar automáticamente una contraseña y hacer que el usuario (autenticado) ingrese una contraseña, es que recordarán la que ingresaron. Además, no mantiene la contraseña en el correo electrónico, nunca, en caso de que alguien más tarde obtenga acceso a correos guardados más tarde, no les ayudará a romperla. – gahooa

Cuestiones relacionadas