¿Por qué son necesarios dos tokens CSRF (campo oculto y cookie) para mitigar los ataques CSRF?

2

He visto el curso Pluralsight sobre seguridad web, que establece que para mitigar los ataques CSRF, el sitio web debe devolver dos tokens CSRF "emparejados" al cliente, uno en un campo de formulario oculto y otro en una cookie, que son asociado a la sesión del usuario. Estos tokens se emiten cada vez que el usuario visita una página con, por ejemplo, un formulario.

Ahora, dado que el sitio web del atacante no puede obtener el token de campo de formulario oculto (política del mismo origen), no puede emitir una solicitud válida a la página que contiene el formulario.

¿Pero por qué son necesarios dos tokens CSRF para prevenir CSRF? ¿No es el token de campo de formulario suficiente por sí mismo?

    
pregunta Shuzheng 15.03.2018 - 18:31
fuente

3 respuestas

3

El patrón que está describiendo se conoce como "cookie de envío doble", y es una forma común de defenderse contra CSRF. El punto aquí es que no requiere que el servidor recuerde el token. El cliente envía el token en una cookie y de alguna otra manera, por ejemplo. en un campo de formulario. El servidor comprueba que ambos tokens son idénticos.

Esto funciona porque el atacante no puede leer ni escribir la cookie y, por lo tanto, no puede reproducirla en el campo de formulario. Por eso hay que enviarlo dos veces:

  • Si solo hubiera una cookie, se enviaría automáticamente en cada solicitud y no ofrecería ninguna protección.
  • Si solo hubiera un campo de formulario, no habría nada con qué compararlo y el atacante podría ingresar cualquier valor.

Hay otras defensas contra CSRF, que solo usan un token. Lo más común es simplemente almacenar el valor correcto en una variable de sesión en el servidor y verificar que un campo de formulario coincida. No se necesita ninguna cookie. Sin embargo, esto tiene el inconveniente de que el servidor debe mantener un estado por usuario.

    
respondido por el Anders 15.03.2018 - 20:04
fuente
2

Un token es suficiente siempre que sea el campo de formulario oculto, y es por solicitud (lo que significa que recibe un token en cada respuesta que se enviará en la próxima solicitud). Tenga en cuenta que el token no debe almacenarse en una cookie ya que las cookies se envían automáticamente.

Hay diferentes maneras de hacer las cosas (y algunas son específicas del marco). El proceso de dos token también sirve como una buena manera de resolver el problema CSRF. El token en la cookie y en la página están criptográficamente vinculados. Por lo tanto, el servidor tiene que hacer esta verificación y continuar con el procesamiento de esta solicitud si todo está bien.

    
respondido por el H4X 15.03.2018 - 22:32
fuente
0

Para evitar ataques CSRF, el token CSRF debe coincidir con el token esperado.

El sitio web necesita almacenar el token esperado, y una forma común de hacerlo es mediante la configuración de una cookie.

Si ambos tokens coinciden, entonces el formulario es válido.

    
respondido por el Benoit Esnard 15.03.2018 - 18:43
fuente

Lea otras preguntas en las etiquetas