¿Está bien colocar el token CSRF en una cookie?

1

Estoy desarrollando protección CSRF con un token para una de mis aplicaciones. Dado que no hay lugar para implementar el token en POST o GET o datos de formulario, estoy pensando en ponerlo en una cookie. ¿Es ese un buen enfoque?

    
pregunta shiva 05.10.2018 - 12:33
fuente

4 respuestas

5

Poner el token CSRF en una cookie en lugar de en un campo de formulario o encabezado HTTP es un mal enfoque y no funcionará. Lo que hace que el token CSRF sea efectivo es que (a diferencia de, por ejemplo, una cookie de sesión) no se envía automáticamente en todas las solicitudes. Debe ser agregado manualmente por su aplicación. Si lo pones en una cookie, se enviará automáticamente y, por lo tanto, perderá su efecto.

Por supuesto, si está utilizando el patrón de doble envío de cookies, necesitará una cookie. Pero esa es una historia diferente.

    
respondido por el Anders 05.10.2018 - 13:39
fuente
2

el completamente viola el uso de tener un token csrf. Déjame explicarte por qué. siempre que una víctima envíe una solicitud, su navegador envía automáticamente las cookies asociadas con ese dominio. csrf funciona porque el usuario no cumple con las credenciales de la sesión (si la víctima está registrada). Es.En lugar de que desee enviar el token csrf en una solicitud POST.

    
respondido por el Vipul Nair 08.11.2018 - 18:53
fuente
1

No. No es un buen enfoque.

Esto hace que sea aún más difícil asegurar que el CSRF sea efectivo y manejar una sesión dividida (es decir, 2 ventanas). Además, la cookie persiste independientemente de la ruta de navegación (es decir, no proporciona una prueba del origen de la solicitud).

Estoy muy confundido por su afirmación de que "no hay lugar para implementar el token en POST o GET o datos de formulario", pero parece que tiene el acceso necesario para controlar qué cookies implementa la aplicación.

    
respondido por el symcbean 05.10.2018 - 13:43
fuente
1

El problema con las cookies es que tienden a sobrescribirse unas a otras y, además, se pueden compartir entre varias pestañas / ventanas en el mismo navegador. Entonces, por ejemplo, una cookie CSRF (mal diseñada) puede tener una falla de ejecución como: el usuario inicia sesión en el sitio, se establece una cookie CSRF; el usuario revisa el correo electrónico, hace clic en el enlace malicioso; el enlace se abre en una nueva pestaña, secuestra la cookie y el token de CSRF; La acción maliciosa es ejecutada por el servidor. Alternativamente, un usuario puede simplemente abrir dos pestañas e intentar realizar dos acciones diferentes en cada pestaña, pero al menos una de esas acciones probablemente será bloqueada por la cookie CSRF, si estuviera bien diseñada (uso único, bloqueada a un acción específica / usuario, etc).

Hay formas de mitigar estos problemas, como admitir múltiples tokens en la cookie a la vez, incluyendo una marca de tiempo, una ruta de acción, un nombre de usuario, un valor secreto que solo el servidor conoce, y luego encripta todo en el token CSRF usando AES u otro algoritmo de cifrado seguro. Tenga en cuenta que todo esto tiene que estar diseñado perfectamente, o tendrá un problema CSRF amplio en su aplicación, y es posible que ni siquiera se dé cuenta. Una mejor opción sería solucionar cualquier problema que esté impidiendo que pongas el token en la URL / datos del formulario para empezar.

    
respondido por el phyrfox 05.10.2018 - 15:00
fuente

Lea otras preguntas en las etiquetas