2012-06-09 10 views
9

Esta es una rama de la otra pregunta: What is the best way to implement "remember me" for a website?Permanecer conectado Mejores prácticas: ¿Cómo un nombre de usuario en la cookie lo hace más seguro?

La respuesta más común es poner en práctica lo siguiente: http://jaspan.com/improved_persistent_login_cookie_best_practice

Un resumen:

utilizar un número aleatorio como una muestra de la serie, y otro como un Token de inicio de sesión. Colóquelos en la cookie Permanecer conectado, junto con el nombre de usuario. Asigna una segunda cookie de sesión normal. Cada vez que un usuario llega al sin una cookie de sesión, consuma la cookie de permanecer conectado. Emita un nuevo , esta vez con un nuevo Token de inicio de sesión aleatorio, manteniendo el Token de la serie igual.

¿Por qué incluir el nombre de usuario? ¿Cómo está eso ayudando? El token de la serie debería ser suficiente para identificar al usuario y la serie. El token de la serie se agregó en este enfoque para evitar un ataque DoS en el que un atacante simplemente adivina todos los nombres de usuario y visita el sitio de una vez, desconectando a todos. Pero, ¿por qué tiene sentido dejar el nombre de usuario?

+2

AFAICT incluyendo el nombre de usuario hace dos cosas. En primer lugar, dificulta el registro de inicios de sesión de DoS enviando Tokens de serie aleatorios. (El DoS solo tendrá éxito si adivinas un Token de serie válido y su nombre de usuario emparejado). En segundo lugar, el nombre de usuario defiende contra colisiones inocentes entre los Tokens de la Serie emitidos a diferentes usuarios. Sin el nombre de usuario, una colisión Token serie se vería como una indicación de robo. Por supuesto, si puede garantizar que cada Token de serie nuevo sea único entre todos los Tokens de serie emitidos con anterioridad válidos, entonces esto no es un problema. – ottomeister

+0

Esto tiene más sentido hasta ahora. En un sistema muy distribuido donde comprobar la singularidad de los tokens de la serie no está funcionando, puedo ver por qué incluirías el nombre de usuario o, prefiero, un hash del nombre de usuario. Pero si los Tokens de la Serie son únicos, también pueden quitarle el nombre de usuario a posibles atacantes. –

+0

¿No es mejor usar el ID de usuario en lugar del nombre de usuario debido al rendimiento de búsqueda entero versus cadena? – axelbrz

Respuesta

0

El nombre de usuario y el número se buscan como un par en el servidor antes de emitir una nueva cookie de sesión. Sin el nombre de usuario sería menos seguro (podría volver a jugar con un usuario diferente si robó el número) y será más difícil de buscar.

+3

1) No es más difícil de buscar. El token de la serie es un número único, es una búsqueda barata. 2) ¿Cómo podría reproducirse con un usuario diferente? Tendrían un token de serie diferente.Una vez que se revoca el token de la serie debido a un ataque fallido, el token de la serie es tan útil como un número aleatorio. –

0

Supongo esto:

El nombre de usuario es para la auditoría. Si requiere que el cliente lo envíe junto con el token para autenticación, entonces sabrá qué usuario intenta autenticarse. Lo cual le permite reaccionar de una manera sensata al error de la ficha.

Si solo solicita el token durante la autenticación, entonces no sabe qué usuario realmente lo intenta y en una coincidencia solo conceda acceso a alguien pero no puede hacer nada en caso de error. Alguien puede simplemente tratar de pasarlos ciegamente.

Teniendo esto en cuenta, supongamos que decidimos utilizar el nombre de usuario y el token. Ahora bien, si token es incorrecto, podemos eliminar todos los otros tokens para ese usuario. Pero eso abre el sistema a DOS. El atacante puede desconectar a cualquiera a voluntad. Entonces, para esa serie se agrega.

No tiene que ser un nombre de usuario, alguna otra información que permita identificar al usuario también funcionará.

Cuestiones relacionadas