¿Qué solicitud de cookie es una solicitud sospechosa?

1

Tengo esta tabla que contiene las cookies de todos los usuarios: (sobre el inicio de sesión. Eso es en realidad "recuérdame")

// cookies
+----+---------+-------------------+------------+
| id | user_id |       token       |   expire   |
+----+---------+-------------------+------------+
| 1  | 32423   | dki3j4rf9u3e40... | 1467586386 |
| 2  | 65734   | erhj5473fv34gv... | 1467586521 |
| 3  | 21432   | 8u34ijf34t43gf... | 1467586640 |
+----+---------+-------------------+------------+

Y verifico las columnas user_id y token para validar una cookie:

SELECT 1
FROM cookies
WHERE user_id = :id AND
      token   = :token

Bueno, hay 5 casos:

  1. la fila existe
  2. la fila no existe porque user_id = :id es falso
  3. la fila no existe porque token = :token es falso
  4. la fila no existe porque tanto user_id = :id como token = :token son falso
  5. la fila no existe porque user_id = :id y token = :token son true pero no en la misma fila.

Mi pregunta: ¿Qué caso es peligroso y tengo que preocuparme por ello? ¿Cuál no es importante y tengo que ignorarlo?

Ok, bueno, ¿qué pasa con esta teoría? "No es necesario verificar la columna user_id en absoluto:"

SELECT 1
FROM cookies
WHERE token = :token

Entonces solo hay dos casos:

  1. la fila existe
  2. la fila no existe porque token = :token es falso

Y entonces no hay nada sospechoso. Entonces, ¿esta teoría es buena (segura) ?

    
pregunta stack 04.07.2016 - 01:26
fuente

2 respuestas

1

Si se asegura de que su token contenga suficiente entropía (> 128 bits), no debería tener que verificar la ID de usuario también.

También almacenaría el token hash en tu base de datos usando algo al menos tan seguro como SHA-2, de esa forma si tu tabla de recordar-me está comprometida de alguna manera, un atacante no puede secuestrar las sesiones. La cookie establecida en el cliente debe ser el valor en bruto. Tenga en cuenta que la sal no es necesaria para valores aleatorios suficientemente fuertes.

    
respondido por el SilverlightFox 04.07.2016 - 09:59
fuente
2

Siempre que haya elegido un CSPRNG suficientemente grande para el token, verificarlo debería ser suficiente. En algún lugar del tamaño de 128 a 256 bits debería ser suficiente.

No menciona dónde está guardando el token en el navegador del usuario. Las cookies se utilizan normalmente para esto. Debe tener la configuración Segura y HttpOnly en la cookie. Básicamente, debe tomar precauciones de seguridad similares a la seguridad para una cookie de sesión .

En lo que respecta a no encontrar una fila coincidente en la base de datos, eso no es necesariamente un problema. Por ejemplo, podría faltar una fila porque su sitio lo eliminó debido a que es muy antiguo. El problema de seguridad sería si alguien intenta buscar entre los tokens para encontrar uno válido. Puedes confiar en la probabilidad de hacer esto imposible asegurándote de que elijas los tokens lo suficientemente largos y aleatorios.

    
respondido por el Neil Smithline 04.07.2016 - 03:06
fuente

Lea otras preguntas en las etiquetas