2010-02-02 8 views

Respuesta

4

Como dice Joel, el Same Origin Policy bloqueará el acceso hasta la ventana primaria.

puede configurar un canal de comunicaciones entre las secuencias de comandos del lado del cliente en diferentes documentos/marcos/ventanas del mismo dominio mediante el uso de cookies. Un documento establece document.cookie para escribir una cookie, y luego el otro, en un sondeador de intervalos, lee document.cookie, encuentra algo nuevo en él y lo trata como un mensaje.

Es bastante molesto, ya que tiene que conseguir que cada documento se identifique y señalar cuándo y a quién le está enviando mensajes. Método de último recurso solamente, realmente.

+0

muy buena idea +1 ¿hay alguna manera de observar el valor de una cookie? –

+0

No, solo tienes que seguir buscando en un bucle de encuesta (setInterval). – bobince

+0

Recuerde que si las cookies son demasiado grandes, romperán las solicitudes (hay límites en el tamaño de un conjunto de encabezados de solicitud). – Erlend

3

Sí, porque para obtener una referencia al documento en el otro marco, debe usar el documento principal.

var otherDocument = window.parent.frames[x].document; 
// this will fail ---------^ 

Acceso a los marcos de hermanos también podrían potencialmente permitirá determinar qué otros dominios del documento de nivel superior ha cargado, lo que podría ser interpretado como una vulnerabilidad.

+0

¿Resolvería el problema un archivo crossdomain.xml en el dominio abc.com que permite zxy.com? –

+0

No sé mucho sobre los archivos de políticas de dominios cruzados, pero supongo que es posible si el navegador lo admite. – Joel

+1

No. 'crossdomain.xml' es para Flash, no afecta la Política de JS Same Origin. PD. es 'window.parent'. – bobince

0

Los iframes no podrán obtener ningún contenido de la página principal mediante javascript por la misma política de origen (SOP).

Sin embargo, podrán realizar llamadas POST (GET en algunos casos) a su servidor utilizando sus cookies (esto se denomina CSRF). Por lo tanto, no confíe solo en las cookies de sesión para su seguridad.

Una buena forma de evitar esto, es tener un token en su página principal (invisible para los iframes) que pase a cada llamada a su servidor.

7

Bueno, depende de lo que quiere decir con la comunicación. Parece que algún tipo de comunicación es posible. He aquí un ejemplo: HTML en www.abc.com:

<iframe name="test1" src="http://www.xyz.com/frame1.html"> 
<iframe name="test2" src="http://www.xyz.com/frame2.html"> 

Debido a que los marcos flotantes se nombran podemos hacer esto en Frame2:

<a href="javascript:alert(document.body.innerHTML)" target="test1">click me</a> 

Así hacemos clic en el enlace en el marco 2, pero el contenido del cuadro 1 se muestra.

+0

¡Si esto funciona usted es un salvavidas! –

+0

Pequeña demostración: http://erlend.oftedal.no/blog/demo/frames/ – Erlend

+0

La demostración funciona en FF e IE, pero no en Chrome u Opera –

Cuestiones relacionadas