¿Por qué los navegadores permiten ejecutar JavaScript entre dominios pero no XMLHttpRequests?

La limitación clave que impone la política del mismo origen es que los scripts no pueden inspeccionar o modificar recursos en otros orígenes.

Imagina que has iniciado sesión en Gmail y vas a evil.org. Si no hubiera una política del mismo origen para XHR, evil.org podría simplemente comenzar a hacer XHR para enviar correos electrónicos y leer su correo o publicar mensajes. Lo mismo ocurre con cualquier otro sitio en el que inicie sesión, como, por ejemplo, sus bancos. Esto es claramente malo.

Es la misma razón por la que los scripts no pueden acceder a marcos en otros orígenes. Si evil.org fuera capaz de escribir gmail.com, entonces podría cargar Gmail en un marco y comenzar a hacer cambios en él.

Los navegadores permiten imágenes de origen cruzado, hojas de estilo e incluso archivos de script porque, en la mayoría de los casos, no es posible que terceros inspeccionen los resultados de estos recursos de manera significativa, o generalmente no contienen datos privados. Además, generalmente no es posible realizar modificaciones en un sitio solicitando estos recursos.

Volviendo a un ejemplo, evil.org puede hacer referencia y mostrar el logotipo de Gmail, pero eso no conduce a ninguna hazaña interesante. Incluso si la imagen contenía datos confidenciales, evil.org no puede acceder a ella porque no hay API que lo permitan (la API de lienzo relevante en HTML5 no está permitida en este caso exactamente por esta razón).

En el caso de los archivos de script, ha habido algunos casos de alto perfil (creo que Gmail fue uno) en los que tenían datos privados que resultaron accesibles para terceros, por lo que se vuelve borroso. Pero con XHR, la puerta estaría abierta de par en par, y por eso la limitación está ahí.

La información que Simon, Can y Aaron también es correcta con la adición de que un servidor al que se realiza una solicitud puede decirle al navegador web que permita la solicitud.

Los navegadores modernos realmente permiten CORS (intercambio de recursos de origen cruzado: http://www.w3.org/TR/access-cont …) si el servidor XMLHttpRequest (o XDomainRequest en IE) devuelve un encabezado de respuesta de Access- Control-Allow-Origin ( http://www.w3.org/TR/2008/WD-acc …) que indica al navegador que el dominio desde el que se realiza la solicitud está permitido.

Puede encontrar más información y un ejemplo de esto aquí:
http://www.leggetter.co.uk/2010/…

Se llama la misma política de origen, y se trata principalmente de intranets. Imagine que tiene una URL http: //intranet.corp/top-secret- … – y luego visita http://evil.example.com/ . Si se permitiera XHR de dominio cruzado, el sitio maligno podría absorber ese documento secreto de su intranet sin que se dé cuenta.

JavaScript realmente debería tener las mismas restricciones (no debería poder cargar http: //intranet.corp/top-secret- …) pero, según tengo entendido, nadie detectó el problema hasta que toda la economía de Internet ya dependía externamente guiones alojados como modelo de negocio.

More Interesting

¿Cómo uso el enésimo valor de niño dinámicamente en jQuery?

¿Estamos en peligro de API específicas del navegador?

Desarrollo web front-end: ¿cuál es su configuración de flujo de trabajo / proyecto css?

¿Cómo interactúan todos los lenguajes de programación y todos los lenguajes de secuencias de comandos con cualquier sistema de administración del servidor de bases de datos? ¿Alguien puede desarrollar un software de base de datos completamente nuevo utilizando el lenguaje de programación C?

Cómo copiar un sitio de WordPress en un dominio diferente (manteniendo el tema principal y secundario)

Cómo cargar y descargar varios tipos de archivos en PHP desde la base de datos MySQL

¿Qué plataforma es buena para desarrollar front-end para ideas patentadas, es decir, Vue.js, AngularJS, ReactJS u otra cosa?

¿Cómo se usa Java en el desarrollo web?

¿En qué medida se pueden usar los datos de diferentes sitios en otro sitio sin involucrar problemas de derechos de autor?

¿Qué idiomas o marcos debo aprender en 2017?

¿Cuál es una buena herramienta de gestión de comentarios para recopilar / archivar / analizar los comentarios de varias fuentes diferentes?

¿Cómo almacena grandes cantidades de datos de impresión / registro en MySQL sin desactivar el servidor MySQL?

¿Cómo creo una lista desplegable dinámica?

Después de aprender un puñado de lenguaje de programación, ¿qué lenguajes son dignos de profundizar y afinar?

¿Polymer JS está muerto?