Búsqueda de sitios web

javascript - CORS - ¿Es algo del lado del cliente, del lado del servidor, o algo a nivel de transporte?


Estoy tratando de entender CORS. Según mi entendimiento, te permite limitar qué dominios pueden acceder a un recurso en tu servidor. Sin embargo, esto no parece ser toda la historia. Por ejemplo, tengo un servicio web sin CORS habilitado. No puedo acceder a este servicio web desde mi aplicación web mediante jQuery (la aplicación se está ejecutando en localhost). Sin embargo, sí puedo acceder al servicio web desde Postman. Entonces, estoy un poco confundido. ¿Hay algún trabajo adicional del lado del cliente que implique CORS?

Respuesta #1

El servidor es responsable de informar los orígenes permitidos. El navegador web es responsable de hacer cumplir que las solicitudes solo se envíen desde dominios permitidos.

CORS se aplica a las solicitudes cuando se incluye un encabezado Origin en la solicitud. Esto incluye solicitudes realizadas desde JavaScript y solicitudes POST. No se aplica a todos los recursos. El origen es el protocolo, el host y el puerto que realiza la solicitud. Las solicitudes realizadas por JavaScript usan el origen que cargó el JavaScript, no el origen desde el cual se cargó.

Cuando CORS no está habilitado, un navegador dependerá de la política del mismo origen. La política del mismo origen solo se aplica a los scripts. El navegador solo permitirá que se carguen scripts desde el mismo origen que la página cargada. Se asume la política del mismo origen cuando no se permiten explícitamente otros orígenes.

Un cliente HTTP que no sea un navegador no utilizará ni la política del mismo origen ni CORS. Las solicitudes realizadas desde estos otros clientes HTTP no tienen origen. A menos que la aplicación de escritorio de Postman emule un navegador, podrá hacer solicitudes a cualquier URL.

CORS y la política de mismo origen son necesarios porque un navegador no confía implícitamente en los sitios web que visita para realizar solicitudes a otros sitios web. No protegen al sitio de origen, protegen al sitio que recibe las solicitudes de origen cruzado. Por eso, los orígenes permitidos dependen del servidor al que se dirige.

Sin estas políticas, un simple script que cargue repetidamente un sitio web podría ser distribuido por redes de anuncios o inyecciones de scripts y entonces cualquier navegador que cargue el script contribuiría a un ataque de denegación de servicio en el sitio web. Con CORS y la política del mismo origen, un navegador limitará el impacto de este script.

Otra protección importante que proporciona CORS es proteger contra la falsificación de solicitudes entre sitios. Evita que un sitio realice ciertos tipos de solicitudes a otro sitio. Estas solicitudes se realizarían utilizando cualquier token previamente creado, como los tokens de sesión.

CORS por ejemplo:

Un navegador web carga una página desde www.example.com. La página incluye un script que realiza una solicitud a www.example.org. El origen de la solicitud es www.example.com. El navegador realiza la solicitud o envía primero una solicitud OPTIONS (la solicitud previa). Cuando el servidor en www.example.org recibe una solicitud de un origen que no sea www.example.org responde con un encabezado de respuesta Access-Control-Allow-Origin que le indica al navegador los orígenes permitidos para realizar solicitudes. También puede responder con otros encabezados como Access-Control-Allow-Methods y Access-Control-Allow-Headers que pueden restringir los tipos de solicitudes permitidas. Cuando al navegador se le indica qué orígenes están permitidos, bloqueará solicitudes futuras de orígenes no permitidos.

Respuesta #2

En realidad, es un poco de ambos. Tu navegador evitará las solicitudes CORS a menos que el origen de la solicitud (es decir, el dominio de la URL de referencia) esté en una lista blanca en el destino, o que el destino apruebe todas las solicitudes sin importar el origen.

En ambos casos, se añade el encabezado requerido (Access-Control-Allow-Origin) que le dice al navegador que está bien enviar la solicitud al destino.

Esto asegura que las personas con intenciones maliciosas no puedan enviar solicitudes a otro dominio sin que el usuario lo sepa.

Artículos relacionados