2011-11-25 16 views
10

Cuando se trata de me recuerda galletas, hay 2 enfoques distintos:Hashes o tokens para "recordarme" las cookies?

Hashes
El remember me cookie almacena una cadena que puede identificar al usuario (es decir, ID de usuario) y una cadena que puede probar que el usuario identificado es el que pretende ser, generalmente un hash basado en la contraseña del usuario.

Fichas
El remember me cookie almacena de forma aleatoria (sin sentido), sin embargo cadena única que se corresponde con un registro en una tabla fichas, que almacena un ID de usuario.

¿Qué enfoque es más seguro y cuáles son sus desventajas?

+6

La intuición sugiere que las cadenas aleatorias desechables deben ser más seguras que las cadenas deterministas producidas por un algoritmo, pero supongo que desea algunas referencias. Y la intuición no siempre es correcta de todos modos. –

+0

¿Por qué está etiquetado Ruby? –

+1

Para cualquiera que encuentre esto, lea: [Buenas prácticas de cookies de inicio de sesión persistentes] (http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/).Básicamente, también necesita hash los tokens de la misma manera que hash una contraseña. –

Respuesta

9

Debe usar tokens generados aleatoriamente si es posible. Por supuesto, la desventaja es que debe escribir un código adicional para almacenar y usarlo en el lado del servidor, por lo que podría no estar garantizado para todas las aplicaciones web. Pero desde el punto de vista de seguridad, esto tiene claras ventajas:

  1. Un atacante no puede generar señales de ID de usuario, pero que sin duda puede generar hashes. Este es un gran problema, incluso si usa sal al generar hashes (y debería hacerlo), los usuarios se atornillan si la sal llega a manos equivocadas.

  2. Ofrecer estos tokens les permite a sus usuarios (o su administrador si es necesario) "desconectarse" de ciertas sesiones de las que podrían desear deshacerse. Esta es una característica realmente interesante, Google y Facebook la usan, por ejemplo.

Por lo tanto, si tiene tiempo y presupuesto: tokens, absolutamente.

1

Sí, los tokens serían más seguros si producen una cadena aleatoria cada vez.

Por otro lado, lo importante de recordarme es que el usuario no tiene que volver a iniciar sesión, por lo que a menos que haga clic en cerrar sesión, rara vez tendrá que volver a producir un token nuevo a menos que caduque.

Creo que se debe seguir con las fichas y no sacrificio seguridad para pereza :-p

4

lo general se mantiene el token -> mapeo de usuario seguro en el lado del servidor. Por lo tanto, en última instancia, su seguridad se basa en mantener el token a salvo y garantizar que su duración esté controlada (por ejemplo, caduca y/o solo es válida cuando se le proporciona desde la misma IP que la utilizada por el proveedor original de las credenciales; sólo un ejemplo)

Security of token based authentication

Espero que esto ayude.