¿Es posible prevenir el CSRF comprobando los encabezados de origen y de referencia? ¿Es esto adecuado, siempre que las solicitudes con ninguno de los dos estén bloqueadas?
Ampliando las respuestas de @Sjoerd y @lindon.
Origin
vs Referer
vs CSRF token Lo más probable es que la razón por la que OWASP recomienda el uso de un token CSRF es que, en el momento en que se realizó esta recomendación, una parte importante de los navegadores aún no era compatible con el encabezado Origin
. Este ya no es el caso, pero las personas son chimpancés .
Para preservar la privacidad, cualquier solicitud del navegador puede decidir omitir el encabezado Referer
. Por lo tanto, probablemente sea mejor verificar solo el encabezado Origin
. (En caso de que desee permitir a los usuarios preservar su privacidad)
El encabezado Origin
es null en algunos casos .
Tenga en cuenta que todas estas solicitudes son solicitudes GET, lo que significa que no deben tener ningún efecto secundario.
Siempre que se asegure de que el sitio web malintencionado que envía las solicitudes con su navegador no puede leer las respuestas, debería estar bien. Esto se puede asegurar utilizando los encabezados CORS adecuados. (¡No uses Access-Control-Allow-Origin: *
!)
Para evitar el "click-jacking", establece el encabezado X-Frame-Options: DENY
. Esto le indicará a su navegador que no está permitido mostrar ninguna parte de su sitio web en un iframe.
La configuración de las propiedades de las cookies SameSite=lax
o SameSite=strict
evitará los ataques CSRF. Sin embargo, esta es una característica bastante nueva y no se puede usar sola, simplemente porque no todos los navegadores comunes lo admiten todavía. Puede realizar un seguimiento del soporte AQUÍ .
Cuando los navegadores lo hagan, es probable que las personas aún recomienden la verificación de los tokens de Origen / Referente / CSRF. Si lo hacen, sin dar una buena razón, es probable que sean chimpancés.
Sí, esto es seguro.
Sin embargo, el encabezado de referencia no es exactamente obligatorio, por lo que puede haber navegadores o proxies que no envíen un encabezado de referencia. Esto significaría que estos clientes no pueden acceder a su sitio web.
Con la introducción de la política de referencia es posible eliminar el encabezado de referencia de una solicitud falsificada. Por lo tanto, para protegerse contra CSRF es necesario bloquear cualquier solicitud a la que le falte un encabezado de referencia (y origen).
Editar: Este documento tiene algunos números sobre qué parte de los clientes omite un encabezado de referencia.
Lea otras preguntas en las etiquetas csrf