2010-02-02 18 views

risposta

4

Come dice Joel, Same Origin Policy bloccherà l'accesso fino alla finestra principale.

È possibile impostare un canale di comunicazione tra gli script lato client su diversi documenti/telai/finestre dello stesso dominio utilizzando i cookie. Un documento imposta document.cookie per scrivere un cookie, quindi l'altro, su un intervallo poller, legge document.cookie, trova qualcosa di nuovo e lo tratta come un messaggio.

È davvero piuttosto fastidioso, in quanto è necessario ottenere ogni documento per identificarsi e segnalare quando e a chi sta inviando messaggi. Solo il metodo dell'ultima risorsa, davvero.

+0

ottima idea +1 c'è un modo per osservare un valore del cookie? –

+0

No, devi solo continuare a guardare su un ciclo di sondaggi (setInterval). – bobince

+0

Ricorda che se i cookie diventano grandi, interromperanno le richieste (ci sono dei limiti sulla dimensione di un insieme di intestazioni delle richieste). – Erlend

3

Sì, perché per ottenere un riferimento al documento nell'altro frame, è necessario utilizzare il documento principale.

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

Accesso ai telai di pari livello potrebbero anche potenzialmente permetterà di determinare quali altri domini documento principale è stato caricato, che potrebbe essere interpretato come una vulnerabilità.

+0

Un file crossdomain.xml nel dominio abc.com che consente a zxy.com di risolvere il problema? –

+0

Non so molto sui file di criteri dei domini, ma suppongo che sia possibile se il browser lo supporta. – Joel

+1

No. 'crossdomain.xml' è per Flash, non influenza lo stesso criterio di origine JS. PS. è 'window.parent'. – bobince

0

Gli iframe non saranno in grado di ottenere alcun contenuto dalla pagina principale tramite javascript dallo stesso criterio di origine (SOP).

Tuttavia, saranno in grado di effettuare chiamate POST (OTTENERE alcune estensioni) al server utilizzando i cookie (denominato CSRF). Quindi non fare affidamento solo sui cookie di sessione per la tua sicurezza.

Un buon modo per evitare ciò è di avere un token nella pagina principale (invisibile agli iframe) che si passa ad ogni chiamata al proprio server.

7

Beh, dipende da cosa intendi per comunicare. Sembra che un tipo di comunicazione sia possibile. Ecco un esempio: HTML sul www.abc.com:

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

Poiché gli iframe sono chiamati possiamo farlo in frame2:

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

Quindi clicchiamo il link nel telaio 2, ma viene visualizzato il contenuto del frame 1.

+0

Se funziona, sei un vero toccasana! –

+0

Piccola demo: http://erlend.oftedal.no/blog/demo/frames/ – Erlend

+0

Demo funziona in FF e IE, ma non in Chrome o Opera –

Problemi correlati