site sheet salvaguardas que prevention para forgery cross cheat avoid security web cross-site

security - sheet - ¿Cuál es la diferencia entre CORS y CSP?



salvaguardas para cross site scripting (4)

CORS permite que un sitio A dé permiso al sitio B para leer datos (potencialmente privados) del sitio A (usando el navegador y las credenciales del visitante).

CSP permite que un sitio evite cargar contenido (potencialmente malicioso) de fuentes inesperadas (por ejemplo, como defensa contra XSS).

Desde mi punto de vista, las tecnologías denominadas Intercambio de recursos de origen cruzado (CORS) y Políticas de seguridad de contenido (CSP) parecen ser muy similares en cuanto a propósito e implementación.

Ambos parecen permitirte incluir en la lista blanca los orígenes de los recursos que incorpora una versión no comprometida de tu página web, a través de encabezados de respuesta HTTP. La única diferencia que puedo ver es que los CSP parecen ser más refinados en lo que puede aprobar en su respuesta HTTP.


CORS verifica con un tercero la autorización para utilizar sus servicios. Entonces, el tercero proporciona o niega la autorización.

Entonces, por ejemplo, si una página en www.example.com necesita hacer una solicitud a www.example.org, debemos enviar una solicitud de OPCIONES enviada a www.example.org con Origin: www.example.com como precursor para solicitar para autorización. Ahora, www.example.org proporciona o niega la autorización.

CSP evita que una página web cargue inadvertidamente contenido malicioso de un tercero al especificar desde dónde se puede cargar un tipo particular de contenido. Entonces, por ejemplo, puede proporcionar una fuente válida para cada uno de los siguientes scripts, CSS, medios, etc. mediante el uso de directivas

Ejemplo:

Content-Security-Policy: default-src ''none''; script-src ''self'' www.google-analytics.com ajax.googleapis.com; connect-src ''auto''; img-src ''auto''; style-src ''auto'';


Ninguna de las respuestas anteriores ofrece una diferencia clara y concisa entre CSP y CORS. Esta es mi forma de pensar sobre ellos:

Digamos que tenemos el sitio web abc.com que quiere enviar una solicitud a def.net .

  1. Cuando el usuario visita abc.com en el navegador, el servidor de abc.com devuelve la respuesta HTTP de abc.com , la restricción de CSP dentro de esta respuesta puede evitar que abc.com en el navegador emita una solicitud a def.net
  2. Si no hay restricción de CSP dentro de la respuesta HTTP de abc.com , entonces abc.com en el navegador puede enviar una solicitud a def.net
  3. Al recibir la solicitud, el servidor def.net responde con la respuesta HTTP def.net , la restricción CORS dentro de esta respuesta puede evitar que abc.com en el navegador la cargue

Así que CSP protege abc.com y CORS protege def.net en el ejemplo anterior.


CORS permite que la Política de Mismo Origen se relaje para un dominio.

Por ejemplo, normalmente si el usuario inicia sesión en example.com y example.org , la política de mismo origen impide que example.com realice una solicitud de AJAX a example.org/current_user/full_user_details y obtenga acceso a la respuesta.

Esta es la política predeterminada de la web y evita que los datos del usuario se filtren cuando se registra en varios sitios al mismo tiempo.

Ahora con CORS, example.org podría establecer una política para decir que permitirá que el origen https://example.com lea las respuestas hechas por AJAX. Esto se haría si tanto example.com como example.org son ejecutados por la misma compañía y se permite el intercambio de datos entre los orígenes en el navegador del usuario. Solo afecta el lado del cliente de las cosas, no el lado del servidor.

Por otro lado, los CSP establecen una política de qué contenido se puede ejecutar en el sitio actual. Por ejemplo, si JavaScript se puede ejecutar en línea o de qué dominios se pueden cargar los archivos .js . Esto puede ser beneficioso para actuar como otra línea de defensa contra XSS ataques XSS , donde el atacante intentará e inyectará una secuencia de comandos en la página HTML. Normalmente, la salida se codificaría ; sin embargo, supongamos que el desarrollador olvidó solo un campo de salida. Debido a que la política impide la ejecución de secuencias de comandos en línea, el ataque se frustra.