¿Usar encabezado en lugar de cookie para CSRF enviar doble cookies?

4

Las cookies de doble envío son vulnerables a la inyección de cookies desde el mismo dominio. ¿Qué sucede si uso un encabezado personalizado en lugar de una cookie?

Ejemplo de solicitud HTTP:

header X-CSRF-PROTECTION = 5a445s66gg54s45a54
POST   X-CSRF-PROTECTION = 5a445s66gg54s45a54, param1=aaa....

¿No es eso más seguro?

Editar: ok, estaba confundido, gracias a Anders ahora tengo una idea más clara.

Me gustaría evitar poner campos de formulario ocultos, pero quiero proporcionar una protección decente.

  • Siempre uso la interacción basada en json ajax

  • Siempre compruebo que el tipo de contenido es 'application / json "

Entonces, lo que propuse antes no agrega seguridad.

Yo podría:

  • almacene en el momento de inicio de sesión un token aleatorio en SESSION y como COOKIE

  • cada solicitud de ajax, debe leer la cookie y establecerla como encabezado de solicitud

  • el servidor puede comparar el encabezado con el valor de la sesión

¿En qué piensas?

    
pregunta Ivano 27.01.2017 - 13:20
fuente

2 respuestas

3

La razón para usar el envío doble (en lugar de un token de sincronizador) es que no desea tener que hacer una búsqueda en el servidor para cada solicitud. Por lo tanto, siempre que el valor de la cookie coincida con el del parámetro de solicitud, se pasará la solicitud.

Eso funciona porque evil.com no puede leer las cookies de example.com (y, por lo tanto, enviar un parámetro de solicitud coincidente), ni establecerlas (y, por lo tanto, establecer ambas a una constante arbitraria).

Es correcto señalar que esto falla para los subdominios. Es posible para evil.example.com para establecer un coockie que se usará para example.com y, por lo tanto, omitir la prueba. Entonces, si no confía en sus subdominios, ¡no use esta solución para la protección de CSRF!

Ahora, ¿tu propuesta resuelve el problema? No. En realidad lo hace peor. Como ya no necesita leer ni modificar ningún valor de cookie, se trata de poder modificar los encabezados de solicitud. Así que esto es lo mismo que simplemente confiar en un solo encabezado con un valor constante, por ejemplo. el comúnmente utilizado:

X-Requested-With: XMLHttpRequest

Tienes dos problemas aquí:

  1. Aún eres vulnerable a un ataque de evil.example.com ya que un subdominio puede modificar los parámetros de solicitud a sus padres usando document.domain .
  2. También puede ser vulnerable a los ataques de evil.com , ya que ha habido que le permiten establecer encabezados para solicitudes de dominios cruzados.
respondido por el Anders 27.01.2017 - 16:43
fuente
0

No está claro lo que está intentando lograr, por lo que es difícil proporcionar información específica, pero se pueden encontrar algunas pautas básicas sobre la prevención de ataques de CSRF en Hoja de referencia de prevención de CSRF de OWasp . Con suerte, eso ayudará a guiarlo por un camino efectivo hacia sus objetivos de seguridad.

    
respondido por el FauChristian 27.01.2017 - 17:02
fuente

Lea otras preguntas en las etiquetas