Recuperacion de Contraseña de Usuarios

Hola buenas noches:

La situación es la siguiente: Tengo una pagina ya en producción, pero el dueño del sistema pidió una opción en la cual si el usuario olvidara su contraseña pues que existiera alguna alternativa de recuperación, tengo entendido de que cuando ingreses una contraseña, esta ya va encriptada entonces nose si se tenga que hacer algún servidor de correo. ¿Alguna sugerencia?

Utilizo el Framework Spring para codificación, como herramienta ORM utilizo Hibernate y almaceno la Base de Datos con PostgreSQL

Les agradecería muchísimo sus consejos, sugerencias y perspectivas de solución.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

reset

Pues sí, no deberías guardar los passwords, ni siquiera cifrados; lo que guardas es una digestión del password, pero eso es un proceso de una vía nada más. Cuando el usuario quiere entrar, le aplicas el hash a lo que puso de password y lo comparas con lo que tienes almacenado y tiene que ser igual. Si lo olvida pues ya no hay manera de recuperarlo, por lo tanto lo único que puedes hacer es enviarle un mail con una liga especial para que lo cambie sin tener el password actual.

La liga que vas a incluir en el mail, debe ser única para ese usuario. Lo que puedes hacer es concatenar la fecha en que estás haciendo el mail, el usuario a quien se lo vas a enviar, y tal vez incluso el hash de password actual, y a su vez hashear todo eso varias veces, y meter eso como un parámetro en el URL, junto con el ID interno del usuario. Así cuando llegue la petición de reiniciar password a tu server, buscas el usuario por su ID interno, y buscas el hash.

Una versión más latosa pero más segura es que no mandes el ID interno del usuario sino que tengas una tabla separada donde guardes ese hash recién generado, junto con la fecha en que lo estás generando y el ID del usuario, y que tenga un ID autogenerado, y enviar ese ID. Al llegar la petición, buscas en esa tabla por ID, con eso obtienes el hash que generaste, lo comparas contra lo que viene en la petición y si coincide, pues ya le permites al usuario poner un password nuevo. La fecha de generación te sirve para borrar los registros viejos en un proceso batch que puedes correr cada X tiempo.

Forgot Password

Reset Your Password!

▲ LoL :)

Imagen de paranoid_android

Jpaul muy buen articulo

Muy buen articulo combina la validación de datos personales y la autenticación.
Yo agregaría algo más ¿Si aplicas un cuestionario así cuantas oportunidades das al usuario antes de bloquear el cuestionario?
Y posterior a eso como desbloqueas el cuestionario. Ya suena a un tramite fisico con credencial de elector o algo similar.

Lo bloqueas temporalmente.

Lo bloqueas temporalmente.

Imagen de ezamudio

bloquear?

Si lo bloqueas temporalmente, entonces ese mecanismo se presta para dar ataques de negación de servicio específicos a ciertos usuarios. Por ejemplo si twitter tuviera ese mecanismo, entonces trato de entrar con tu cuenta, hago como que olvidé mi password, respondo mal el cuestionario, y PUM, tu cuenta se bloquea un rato. Al rato lo hago otra vez. De hecho mejor hago un script para automatizar ese proceso y con eso simplemente puedo bloquear tu cuenta de manera prácticamente permanente. Cibercensura.

Puedes bloquear una cuenta de Twitter por ...

Humm.. Puedes bloquear una cuenta de Twitter por una hora después de algunos intentos fallidos de inicio de sesión.

Sin duda alguna, necesitas implementar otros mecanismos para detectar un ataque del tipo que mencionas.

Resuelto la recuperación de contraseñas y una duda

Que tal ezamudio, quiero agradecerte por la sugerencia que me indicaste, mas adelante creo un post como lo realicé, para que alguien que le interese le pueda ser de ayuda.

Como lo había mencionado en el primer post, utilizo Hibernate y Spring Framework, solo que tengo esa idea "loca" de que las validaciones en los formularios de la aplicación no sean las adecuadas, ya que por ejemplo en una tabla tengo almacenada una tabla donde se guardan los montos, pero de forma fácil voy a esa tabla y sin problemas lo borro, se me ocurre realizar algunas funciones y trigger para poder validarlas.
Solo que estoy atorado de como vincular la aplicación con las validaciones, puedes proporcionarme alguna sugerencia, ó talves no tenga caso que los utilice.

Gracias por el articulo

Te agradesco la información, me sirvió de mucho.

Imagen de paranoid_android

Metodo de ezamudio

El metodo de ezamudio es mas práctico Gracias.
Aplica dependiendo de cada cliente y necesidad.

Tal practicidad está

Tal practicidad está supeditada a la accesibilidad de la cuenta de correo electrónico.