Estoy buscando configurar un script de recuperación de contraseña de php, utilizando un token que caduque después de 24 horas, pero no estoy seguro de cómo hacerlo. Tengo contraseñas de usuario cifradas SHA1 en este momento, todo lo que quiero hacer es agregar un token a la URL que se envía al usuario cuando solicita un restablecimiento de contraseña, pero ¿cómo hago esto correctamente y qué hago? necesidad de almacenar en la base de datos?Ayuda de PHP con restablecimiento de contraseña y caducidad del token
Respuesta
Debe almacenar un token único y una marca de tiempo de caducidad del token. Cuando los usuarios visitan la URL única, deben validar el token, el nombre de usuario y la marca de tiempo de caducidad del token. Si todo está bien, puede enviar una nueva contraseña o mostrar un formulario donde el usuario puede configurar una nueva contraseña.
- Cuando el usuario solicita un restablecimiento de contraseña, generar un token y calcular su fecha de caducidad
- tienda el testigo y su fecha de caducidad en columnas separadas en la tabla de usuarios para ese usuario
- Enviar un correo electrónico a la de usuario que contiene el enlace de restablecimiento, con el token anexa a su URL
- Cuando el usuario pulsa el enlace, coge el testigo de su URL (tal vez con
$_GET['token']
) - Compruebe la señal a su tabla de usuarios
- Comprobar que no es más allá de su fecha de caducidad sin embargo
- Si se ha vencido, invalidarla, tal vez en la limpieza de los campos, y permitir al usuario volver a enviar
- Si el token es válido y usable, presente su formulario de restablecimiento de contraseña para el usuario
- Validar y actualizar la contraseña y borrar los campos simbólicos y expiración
Consejo de sonido; sin embargo, es probable que valga la pena señalar aquí que dado que tales tokens son 'equivalentes a contraseña', no se deben almacenar desnudos en la base de datos: sal y hash, tal como se hace con las contraseñas de los usuarios. – eggyal
me gustaría ir sobre él mediante la creación de otra base de datos llamada pessword_reset_sessions.
Para que pueda almacenar la siguiente:
ID de usuario generalhash userhash timeinititated intentos
luego con identificador de usuario que isnert el OBV identificación del usuario, con picadillo general es un hash que no se muestra para el usuario pero utilizado para crear el userhash.
iniciada debe ser una marca de tiempo UNIX de la primera vez que solicitó una nueva contraseña.
una vez que confirme que el usuario que solicita la contraseña ha ingresado la información de validación, como correo electrónico, nombre, pregunta secreta. usted crea una fila dentro de la tabla de restablecimiento de contraseña.
y emita un correo electrónico que contenga el userhash.
cuando el hash regresa a través de la $_GET['hash']
a continuación crea un otro hash a partir de la generalhash
para comparar con el hash que llegan a través de $ _GET [], si el hash no coincide entonces incrementar el attempts
se también puede verificar antes para asegurarse de que no ha disparado la seguridad durante 2 intentos.
No usaría una base de datos en absoluto. Pero una forma de encriptación en su lugar.
Simplemente envíe la información necesaria en el hipervínculo suministrado por correo, firmado por el hash. Algo como esto
$token = sha1($user_id.$time.$user_pass.$salt).dechex(time()).dechex($user_id);
$link = "http://".$domain."/restorepass/?token=$token";
Al recibir sólo divide y decodificar de nuevo, y después comprobar hash y tiempo de espera.
Woow, esto es inteligente :) No voy a usarlo, pero se ve bien :) ¿Realmente lo usas en alguna parte? –
¿Por qué "dechex (time())"? ¿Por qué es mejor que hacerlo? "? Token = $ token & time = $ time & userid = $ user_id"? – boblapointe
Creo que esto no es confiable, porque un atacante podría modificar un token viejo con un nuevo dechex (time()) para reutilizarlo. – alvaropgl
- 1. generar token de restablecimiento de contraseña en node.js
- 2. Necesita ayuda con el algoritmo de caducidad del crédito
- 3. Tiempo de caducidad del token de acceso a Google
- 4. Django 1.0, usando el restablecimiento de contraseña predeterminado
- 5. Ayuda con el cálculo (y utilidad) de la entropía contraseña
- 6. Membresía de ASP.NET Restablecimiento de contraseña
- 7. ¿Cómo crear un enlace de restablecimiento de contraseña?
- 8. y contraseña en problema de contraseña - php
- 9. ¿Necesita ayuda con PHP y MySQL
- 10. contraseña cambiada, token de acceso no válido
- 11. restablecimiento de contraseña Django. No envío de correo
- 12. ¿Cómo desactivo la caducidad de la contraseña de Oracle?
- 13. PHP Soap Encabezado ayuda
- 14. Restablecimiento de contraseña enviando contraseñas temporales por correo electrónico
- 15. caducidad del caché NHibernate
- 16. Uncaught SyntaxError: Token inesperado - jQuery - ¡Ayuda!
- 17. ¿Cómo recibir una notificación cuando un usuario cambia la contraseña o solicita un restablecimiento de contraseña?
- 18. Hashing de contraseña compatible con Java y PHP
- 19. Ayuda con la ruta de Windows - PHP
- 20. Ayuda con la función de PHP array_filter
- 21. Cambiar la contraseña de usuario de Linux del script PHP
- 22. Revise mi diseño: instalación de restablecimiento de contraseña para el sitio web
- 23. ¿Suplantar con nombre de usuario y contraseña?
- 24. Cómo obtener el token de github usando el nombre de usuario y la contraseña
- 25. Cómo proteger con contraseña la transmisión de videos con php
- 26. HTTP: combinando caché de caducidad y validación
- 27. ¿Cómo puedo averiguar la fecha de caducidad de una contraseña de ADUser o días restantes hasta que caduque la contraseña?
- 28. python solicitud http con token
- 29. Protección con contraseña PHP: md5 a sha512
- 30. Ayuda con PHP mail() la función
Añadiré que cuando el usuario ingresa a la página de 'reinicio', obtiene el token y la fecha de vencimiento de DB y verifica si existe y si aún es válido. Si es demasiado viejo, elimínelo de DB. Si alguno de estos dos, le muestra la página de error. Bueno, esto puede ser obvio :) –
Sí, tienes razón, mi solución es solo un esqueleto así que dibujo: "Si todo está bien" – fabrik