2012-03-27 22 views
8

Duplicar posible:
What is the best way to implement “remember me” for a website?¿Cómo implementar la función recordarme?

Cada usuario tiene Steam ID 32 caracteres (hecho de la siguiente manera: md5("salt" . $username . $user_password . "salt2");). Y almaceno este valor bajo el campo 'unique_id' en los usuarios de la tabla. ¿Es una buena manera de asignar este valor a las cookies del usuario y dejar que inicie sesión solo si lo tiene asignado? Y, por supuesto, verifíquelo si ese valor existe en la base de datos.

No creo que sea una buena práctica, porque si alguien roba su cookie, podrán iniciar sesión en su cuenta.

¿Cuál es la otra/mejor solución? Por supuesto, lo más seguro es, probablemente, almacenarlo en sesiones, pero quiero implementar esta función de recordarme.

Gracias.

+1

Creo que casi todos me recuerdan las características ya están vul posible para robar cookies. En general, es muy difícil robar las cookies de un usuario a menos que tenga una vulnerabilidad XSS en su sitio, que en sí es un gran agujero. – mellamokb

+3

Aquí hay algunas buenas referencias http://stackoverflow.com/a/3128997/46675 –

+0

@mellamokb ¿Es cierto? Por alguna razón, me he estado imaginando personas conectando cosas a mi sitio web e interceptando todas las cookies transmitidas (estúpido, lo sé), y es por eso que eliminé mi antiguo sistema de almacenar su contraseña en una cookie (De nuevo, un sistema malo, no lo haría). No lo use de nuevo de todos modos: P). ¿Es solo XSS que es posible? –

Respuesta

3
nombre

Say de la tabla de base de datos para la cookie persistente es pcookies con las siguientes columnas:

  • cookie_id (CHAR)
  • user_id (INT)
  • caducidad (DATETIME)
  • sal (CHAR)

pasos de creación de cookies:

  1. Después del inicio de sesión exitoso, cree un registro de cookies en la base de datos con una identificación única. Puede generarlo con hash_hmac ('sha512', $ token, $ salt) donde $ token = uniqid ($ user_id, TRUE) y $ salt = md5 (mt_rand()).
  2. Almacene 'id de usuario', 'tiempo de expiración' y 'sal' junto con 'id de cookie' en la base de datos.
  3. Almacenar 'cookie id' y 'token' en la cookie.

pasos de autenticación:

  1. Si hay una cookie persistente encontrado, comprobar primero si el registro está disponible en la base de datos o no.
  2. Si el registro está disponible, verifique si la cookie expira o no.
  3. Si la cookie no caduca, valide la id de cookie por $ cookie_id == hash_hmac ('sha512', $ token_from_cookie, $ salt_from_db).
  4. Una vez que se valida la cookie, elimínela de la base de datos y cree una nueva cookie de acuerdo con los pasos de creación de cookies anteriores.
  5. Si la cookie se encuentra como no válida, borre la cookie del dispositivo y elimine todos los demás registros de cookies del usuario de la base de datos, observe el uso de un intento de robo y proceda al proceso de inicio de sesión manual.

Notas:

  • Cuando sesión está disponible, hacer caso omiso de comprobar galletas.
  • Después del cierre de sesión, borre la cookie junto con el registro de la base de datos.
  • Nunca permita que los usuarios ejecuten solicitudes confidenciales como cambiar la contraseña o ver información de la tarjeta de crédito desde un inicio de sesión persistente de cookies. Invoque la contraseña para iniciar sesión y agregue un indicador en la sesión para permitir todas las operaciones posteriores.
+0

En este escenario, ¿qué impide que las personas que usan las cookies de otras personas entren en sus cuentas? –

+1

En este esquema, cada vez que el usuario accede al sitio con una sesión vencida, se genera una nueva cookie. Por lo tanto, el valor de la cookie está cambiando con tanta frecuencia que será difícil para un atacante acceder al sitio dentro de la ventana de ataque correcta. En otras palabras, después de un ataque XSS exitoso, el atacante tendría que iniciar sesión dentro de, digamos, 20 minutos. – mellamokb

Cuestiones relacionadas