2009-07-11 11 views
19

C'è un caso limite molto particolare nelle politiche interdominio riguardanti l'oggetto window.top.Location ...Che cosa può fare esattamente un IFrame con l'oggetto top.Location (cross-domain)?

Diciamo che ho IFrame A, nel dominio www.bbb.com, che vive all'interno di una pagina nel dominio www.aaa.com.

la pagina all'interno del IFrame può:

  • Confronta window.top.location a window.location (per rilevare se è in fase di incorniciato)
  • chiamata window.top.location.replace (window.location) per reindirizzare ad auto
  • chiamata window.top.location.replace ("qualsiasi stringa arbitraria") per reindirizzare da qualche altra parte

Ma non può:

  • Alert, Document.Write, o fare qualsiasi tipo di produzione di window.top.location.href
  • Concatenate in qualsiasi altra variabile, o usare in alcun modo utile
  • chiamata window.top.location .reload()

Questi sono solo quelli che ho potuto trovare rapidamente. Sono sicuro che ci sono altri casi limite.
sembra che il browser non permette l'uso dell'oggetto top.location se la parte superiore è in un altro dominio, ad eccezione per un paio di cose ... whitelist

È questo documentato da nessuna parte?
Posso trovare che cosa sono queste cose autorizzate?
Questo è nello standard HTML e implementato in modo uguale in tutti i browser? O è l'implementazione di questo semi-casuale?

+1

se si trova una risposta, in particolare per "è documentato ovunque", si prega di postarlo. Ho dovuto lavorare con le restrizioni di sicurezza dei domini IE in passato, e sembra sempre essere una conoscenza acquisita di ciò che puoi o non puoi fare. Non ho mai visto alcuna documentazione. –

+0

Definitivamente, ma non ho trovato nulla finora (quindi la domanda qui) –

risposta

6

Le regole di sicurezza differiscono con la versione del browser. Generalmente le versioni più recenti hanno regole più severe, ma anche più perfezionate.

Sospetto che i browser più vecchi consentissero di accedere liberamente all'oggetto posizione del frame superiore, un browser più recente lo negherebbe completamente e le versioni correnti consentono di confrontare gli oggetti posizione ma non di leggerli.

Potrebbe essere possibile trovare la documentazione a riguardo, ma sarebbe specifica per ciascun browser e specifica per ciascuna versione del browser. Per quanto ne so, non esiste un vero standard per questo. Ogni fornitore di browser cerca di proteggere l'utente il più possibile, pur mantenendo un po 'di usabilità per il costruttore del sito web. In genere non si può presumere che qualsiasi cosa vicina al bordo funzioni in tutti i browser, o che continuerà a funzionare nelle versioni future.

+1

Cosa intendi per "confrontare gli oggetti di posizione ma non letti da loro"? Come potrebbe la pagina incorporata confrontare la sua posizione senza essere in grado di * conoscere * l'url della pagina principale? – Pacerier

+1

@Pacerier: poiché la proprietà location è un oggetto, che contiene l'URL della pagina come proprietà 'href'. È possibile confrontare gli oggetti posizione anche se contengono un URL da un dominio diverso, ma non è possibile leggere la proprietà 'href' dall'oggetto posizione quando l'URL proviene da un dominio diverso. – Guffa

+0

Grazie per il chiarimento =) Quali sono alcuni modi noti per aggirare questa restrizione e ottenere l'url della "pagina contenitore"? – Pacerier

8

Specificato esattamente dallo HTML5 standard in section 5.5.3.1.

+0

+1. È esattamente come detto nella risposta. –

+0

Vorrei che le specifiche fossero più leggibili. "con le seguenti eccezioni: Il settaggio href, se il contesto di esplorazione responsabile specificato dall'oggetto delle impostazioni di immissione ha familiarità con il contesto di esplorazione con cui è associato l'oggetto Posizione" WHAT ??? –

Problemi correlati