¿Es seguro almacenar el token de restablecimiento de la contraseña en la sesión de PHP?

3

Tengo un sistema de inicio de sesión creado en PHP. Actualmente no tiene la función "Olvidé mi contraseña" y me gustaría implementar la función.

Para esto estoy planeando hacer lo siguiente:

  1. Cuando el usuario envía el formulario con el correo electrónico en la página de "contraseña olvidada", se envía un correo electrónico con un token único de 50 caracteres.
  2. La clave única generada se almacena en la cookie de sesión usando
    $_SESSION['forgotPassToken'] = "tokenof50chars";
  3. La página solicita que se escriba el token único enviado a la bandeja de entrada del correo electrónico del usuario.
  4. Cuando se ingresa el token, el código verifica si el token en la sesión y el ingresado son los mismos.
  5. Si es el mismo, se genera un nuevo nombre de variable de sesión forgotPassVerified y se redirige a una página donde el usuario puede ingresar la nueva contraseña y enviarla.
  6. La contraseña se cambia y la sesión se destruye. Pages solicita al usuario que inicie sesión con una nueva contraseña.

Mi pregunta: ¿es seguro almacenar el token generado aleatoriamente en la sesión de PHP o debo usar la base de datos?

No me gusta hacer esto en la base de datos. Por eso me acerco a esta sesión.

Estas son las razones por las que no uso la base de datos para almacenar tokens:

  1. Algunos usuarios (crackers) simplemente envían el formulario con un correo electrónico. Ellos no marque la bandeja de entrada.
  2. Guardar espacio en la base de datos
  3. Reduzca el uso de la ejecución de consultas SQL.
pregunta Subin 18.03.2014 - 16:32
fuente

1 respuesta

5
  

¿Es seguro almacenar el token generado aleatoriamente en la sesión de PHP o debo usar la base de datos?

Puede ser si se hace correctamente. ¿Cómo se controla el acceso a los archivos que almacenan la información de la sesión? Esto es especialmente una preocupación en un sistema compartido.

Sin embargo, hay inconvenientes en este enfoque. Las sesiones expiran y el correo electrónico puede ser lento. Si el usuario no recibe el correo electrónico de inmediato, puede cerrar el navegador, en cuyo caso se borrará la ID de sesión almacenada en el navegador. Luego, cuando reciben el correo electrónico y escriben el secreto, no puede validar la solicitud.

    
respondido por el mikeazo 18.03.2014 - 18:01
fuente

Lea otras preguntas en las etiquetas