Uso de tokens para mantener a los usuarios conectados

1

Soy un desarrollador web de PHP que recientemente ha estado leyendo sobre seguridad y, por lo tanto, esta pregunta entró en mi mente: ¿Cómo autenticar de forma correcta y segura a los usuarios que ya han iniciado sesión con un token? He visto la técnica mencionada en varios lugares, pero no he encontrado ninguna demostración de ello.

Yo mismo implementé una versión que funciona así:

  1. El usuario inicia sesión con su nombre de usuario y contraseña. (Se almacena utilizando un hash pbkdf2 de 1024 bits)
  2. Se genera un token aleatorio y luego MD5 utilizando el siguiente código PHP: uniqid(mt_rand(), true)
  3. Esta información se almacena en la base de datos, una sesión de PHP y una cookie.
  4. Cuando el usuario accede a una página, se llama a una función que verifica si el token en la sesión o la cookie coincide con el token almacenado en la base de datos. Si lo hace, el usuario permanece conectado, si no, el usuario se desconecta.
  5. Cada vez que se envía una solicitud al servidor, se llama a esta función y se repiten los pasos 2 y 3.
pregunta Cbeppe 21.05.2012 - 18:49
fuente

1 respuesta

2

Una buena cosa que hacer cuando se propone un concepto de seguridad, es crear una lista de escenarios , contra la que debe protegerse. Sin ese marco, es difícil hacer comentarios.

Comparémoslo con el manejo de sesiones:

  1. El usuario inicia sesión (o accede al sitio)
  2. Se genera un token aleatorio llamado sessionid
  3. El sessionid (y otra información vinculada a él) se almacena en el servidor (en una base de datos, sistema de archivos o memoria)
  4. Cuando el usuario accede a una página, se llama a una función que verifica la identificación de la sesión y lee la información asociada. Si el sessionid es válido, el usuario permanece conectado. Si no, el usuario se desconecta.

Por lo tanto, la diferencia principal es el paso 5 , en el que generas un nuevo token para la siguiente solicitud.

Entonces, si se pierde una solicitud, el usuario se desconectará. Esto podría ayudar a un usuario a detectar que fue víctima de un CSRF . Sin embargo, lo más probable es que el hecho de que se desconecte no genere demasiadas sospechas para los usuarios normales.

Se fuerza un orden estricto de solicitudes . Si dos solicitudes se procesan en paralelo (por ejemplo, abrir dos pestañas del navegador en un período de tiempo corto), ambas enviarán la misma cookie. Como resultado, una pestaña fallará y el usuario se desconectará.

    
respondido por el Hendrik Brummermann 22.05.2012 - 08:11
fuente

Lea otras preguntas en las etiquetas