Esta pregunta solo trata sobre la protección contra ataques de falsificación de solicitudes entre sitios.
Se trata específicamente de: ¿Es la protección a través del encabezado de origen (CORS) tan buena como la protección a través de un token CSRF?
Ejemplo:
- Alice inició sesión (usando una cookie) con su navegador en " https://example.com ". Supongo que usa un navegador moderno.
- Alice visita " https://evil.com " y el código del lado del cliente de evil.com realiza algún tipo de solicitud a " https://example.com " (escenario clásico de CSRF).
Entonces:
- Si no verificamos el encabezado de origen (del lado del servidor) y no hay un token CSRF, tenemos un agujero de seguridad CSRF.
- Si revisamos un token CSRF, estamos a salvo (pero es un poco tedioso).
- Si verificamos el encabezado Origin, la solicitud del código del lado del cliente de evil.com debería bloquearse tan bien como lo haría cuando se usa un token CSRF, excepto, si es posible de alguna manera que el código de evil.com configure el encabezado Origin.
Sé que esto no debería ser posible con XHR (ver, por ejemplo, Seguridad para compartir recursos de origen cruzado ), al menos no, si confiamos en que la especificación W3C se implementará correctamente en todos los navegadores modernos (¿podemos?)
Pero, ¿qué pasa con otros tipos de solicitudes, por ejemplo, envío de formularios? ¿Cargando una etiqueta script / img / ...? ¿O de cualquier otra forma que una página pueda utilizar para crear (legalmente) una solicitud? ¿O quizás algún truco de JS conocido?
Nota: no estoy hablando de
- aplicaciones nativas,
- navegadores manipulados,
- errores de secuencias de comandos entre sitios en la página de example.com,
- ...
Origin
? Eso negaría la protección de CORS.