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.
- ismael's blog
- Inicie sesión o regístrese para enviar comentarios
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
Best Practices for a Secure 'Forgot Password' Feature [PDF]
Reset Your Password!
▲ LoL :)
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.
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.
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.