¿Será suficiente con verificar el token CSRF en el encabezado y el formulario oculto?

1

Por lo que leí aquí , los tokens CSRF del encabezado de la cookie no pueden Ser leído debido a la política del mismo origen.

¿Es suficiente comparar el token CSRF en el encabezado de la cookie con el elemento oculto del formulario?

Con este método, la implementación del token CSRF elimina la necesidad de guardar el token CSRF en el servidor; ¿Es este un enfoque correcto?

    
pregunta vikkyhacks 09.10.2014 - 16:17
fuente

3 respuestas

1
  

¿Es suficiente comparar el token CSRF en el encabezado de la cookie con el elemento oculto del formulario?

Un token aleatorio que tiene que ser el mismo en la cookie y la forma es una estrategia común contra XSRF, la "cookie de envío doble". Es usado, por ejemplo, por Django, por lo que claramente algunos lo consideran suficiente.

Sin embargo, es más débil que el patrón de "token de sincronizador" recomendado generalmente (por ejemplo, por OWASP), en el que el token de forma debe coincidir con un token almacenado en el servidor y asociado a la sesión.

Personalmente, no elegiría este método para un sitio sensible.

El ataque al que la cookie de envío doble es vulnerable, y el token del sincronizador no lo es, es el forzado de cookies.

  

Los tokens CSRF del encabezado de la cookie no se pueden leer debido a la política del mismo origen.

En general, es difícil leer una cookie de otro origen, por lo que las rutas para hacerlo (por ejemplo, XSS, MitM) generalmente significan que ya debe haber comprometido el sitio bastante sólidamente.

Sin embargo, escribir cookies no está tan bloqueado, gracias a un diseño deficiente en la especificación de cookie original. Lo más importante es que un sitio vecino malintencionado o comprometido en dodgy.example.com puede escribir una cookie con el dominio establecido para example.com que será leído por sensitive.example.com . Además, si bien un sitio protegido por HTTPS es seguro en contra de que sus cookies sean leídas por un hombre en el medio del ataque de nivel de red, es posible que un MitM genere tráfico a un dominio vecino no protegido por HTTPS que no lo hace. ni siquiera es necesario que existan, y use ese dominio vecino para establecer una cookie que no sea secure que será leída por el sitio HTTPS de la víctima. Y hay algunos otros ataques que podrían usarse para forzar cookies, por ejemplo, inyección de encabezado.

Al forzar una cookie en el sitio de la víctima, el atacante sabe cuál debe ser el token en el formulario y, por lo tanto, puede incluirlo en un formulario de sitios cruzados, evitando la comprobación XSRF. Esto constituye una elevación del ataque de uno ligeramente débil a uno más fuerte.

    
respondido por el bobince 09.10.2014 - 20:19
fuente
1

No es suficiente para validar tokens CSRF en el cliente, porque no puedes saber si el cliente es el usuario u otro sitio que se hace pasar por el usuario.

Debe comparar el token enviado por el usuario con el token que ha almacenado en el servidor.

    
respondido por el ThoriumBR 09.10.2014 - 16:57
fuente
1

El token CSRF debe verificarse en el lado del servidor.

Dicho esto, el token a menudo se almacena en una cookie, por lo que su enfoque es correcto.

CSRF funciona así:

Para solicitud:

  1. Crear un token y almacenarlo en el servidor o en una cookie
  2. Agregar el token al formulario
  3. Cuando reciba una publicación, verifique que el token en el formulario sea el mismo que el token guardado en el servidor (o cookie)
respondido por el Gudradain 09.10.2014 - 16:55
fuente

Lea otras preguntas en las etiquetas