Cookies "Recordarme": ¿las implementé de manera segura?

1

Actualmente estoy trabajando en el sitio web de un proyecto para mascotas y quiero implementar la función "Recordarme" para los inicios de sesión y quería saber si mi procedimiento es seguro. El proceso de autenticación básicamente es algo como esto:

  • Si un usuario desea ser recordado e inicia sesión con éxito junto con la cookie de su sesión, obtiene una cookie recordatoria de larga duración.
  • La cookie contiene algunos datos aleatorios (un UUID) y la identificación del usuario.
  • El UUID y un hash con sal de la identificación del usuario se almacenan en una base de datos.
  • Cuando el usuario debe volver a autenticarse desde una cookie de este tipo, la identificación del usuario de la cookie se verifica contra el hash de la base de datos correspondiente a esos datos aleatorios.
  • Si coinciden, el usuario inicia sesión, el par de id / hash actual se elimina de la base de datos y el usuario obtiene uno nuevo para dar a los posibles ladrones de cookies una ventana más estrecha. para actuar
  • Los pares de ID / hash con más de 3 semanas de antigüedad también caducan para prevenir aún más el robo de cookies.

Me gustaría una revisión de mi método. ¿Es esto seguro? Si es así, ¿podría implementarse de otra manera, quizás más simple,?

    
pregunta nikitautiu 09.08.2014 - 00:51
fuente

3 respuestas

4

Usted está complicando la solución y no está obteniendo mucho de ella. Otros han revisado las fallas con su implementación, pero esbozaré un mejor enfoque.

Cuando un usuario elige que su autenticación sea recordada en las sesiones del navegador, use un CSPRNG para generar una cadena aleatoria de 128 bits. Envíeles esta cadena, luego guárdela (SHA-2/256 está bien) y guárdelos junto con el registro del usuario. Cuando el usuario vuelva a visitar su sitio, seleccione el token que ha proporcionado y busque el registro de usuario correspondiente con ese token. Cuando un usuario cierre la sesión explícitamente, elimine la cookie del navegador y elimine el hash del token de la base de datos.

Probablemente reeditaría tokens cada vez que un usuario autenticado con uno (por ejemplo, deberían ser válidos para un solo uso). Y almacene la fecha de caducidad junto con el token de hash para garantizar su máxima vida útil en el servidor.

    
respondido por el Stephen Touset 10.08.2014 - 03:28
fuente
3

El hecho de que un UUID sea altamente probable que sea único no significa que sea difícil de adivinar. Los UUID de la versión 4 contienen 122 bits aleatorios, y lo recomendaría o la versión 5 (SHA-1). Honestamente, generalmente uso SHA256 o superior y una larga cadena de números aleatorios concatenados. Luego almacene el código hash en la base de datos y en una cookie.

No hay mucho beneficio en volver a usar el token a largo plazo porque es probable que un atacante que tenga acceso a la base de datos no necesite robar sesiones. Supongo que podría mitigar los casos de esquina en los que el atacante tiene permisos de base de datos limitados o la sesión se comparte entre múltiples puntos finales.

¿Cuál es tu sal? ¿Lo estás almacenando en la base de datos? (mala idea) ¿Qué es exactamente lo que el almacenamiento del identificador de usuario hash / salado te compra? No creo que sea una vulnerabilidad, pero solo deberías almacenar el token de sesión a largo plazo (que podría incluir el UUID / número aleatorio, un salt y un nombre de usuario). Cuando el usuario se desconecte, busque su sesión actual en la base de datos y compare la columna de la sesión a largo plazo con el valor en la cookie.

    
respondido por el glidersecurity 09.08.2014 - 04:02
fuente
0

Repetiré el comentario de glidersecurity sobre los UUID con un enlace de Wikipedia: enlace

Con su solución actual (si la estoy leyendo correctamente), si un atacante obtiene acceso a la base de datos de solo lectura, solo tiene que proporcionar cookies de este modo:

foreach userID in the users table:
    foreach random_number in the remember_me_cookie table:
        try to start a session with userID+random_number

para forzar una entrada en tu sistema.

    
respondido por el PlasmaSauna 09.08.2014 - 04:10
fuente

Lea otras preguntas en las etiquetas