Formas de eludir la política del mismo origen
La misma política de origen
Quería hacer un wiki de la comunidad con respecto a las políticas de mismo origen de HTML/JS para, con suerte, ayudar a cualquiera que busque este tema. Este es uno de los temas más buscados en SO y no hay una wiki consolidada para ello así que aquí voy :)
La política del mismo origen impide que un
documento o script cargado desde un origen obtenga o establezca propiedades de un documento de otro de otro origen. Esta política se remonta a hasta Netscape Navigator 2.0.
¿Cuáles son tus formas favoritas de evitar las políticas de mismo origen?
Por favor, haz que los ejemplos sean verbales y, preferiblemente, enlaza también tus fuentes.
150
3
**El método del proxy inverso.
Configurar un simple proxy inverso en el servidor, permitirá al navegador utilizar rutas relativas para las peticiones Ajax, mientras que el servidor estaría actuando como un proxy hacia cualquier ubicación remota.
Si se utiliza mod_proxy en Apache, la directiva de configuración fundamental para configurar un proxy inverso es el
ProxyPass
. Normalmente se utiliza de la siguiente manera:En este caso, el navegador podría solicitar
/ajax/web_service.xml
como una URL relativa, pero el servidor lo serviría actuando como proxy ahttp://other-domain.com/ajax/web_service.xml
.Una característica interesante de este método es que el proxy inverso puede distribuir fácilmente las peticiones hacia múltiples back-ends, actuando así como un equilibrador de carga.
Yo uso JSONP.
Básicamente, se añade
en tu página.
Se debe llamar a some_func() para que se le notifique que los datos están dentro.
Personalmente,
window.postMessage
es la forma más fiable que he encontrado para los navegadores modernos. Tienes que hacer un poco más de trabajo para asegurarte de que no te estás abriendo a los ataques XSS, pero es una compensación razonable.También hay varios plugins para los conjuntos de herramientas de Javascript más populares que envuelven
window.postMessage
y proporcionan una funcionalidad similar a los navegadores más antiguos que utilizan los otros métodos mencionados anteriormente.