Ho indagato sul codice frame breaking di recente e ho riscontrato alcuni comportamenti davvero bizzarri relativi allo same origins policy che non riesco a capire.Perché gli interruttori di frame funzionano in più domini e si possono utilizzare in modo condizionale interruttori di frame?
Supponiamo che io ho una pagina Breaker.html sul dominio A, e una pagina Container.html sul dominio B. Il codice di rompere il telaio esempio potrebbe andare in Breaker.html, come di seguito:
if (top !== self) top.location.href = self.location.href;
Questo interromperà Breaker.html da Container.html, ma non capisco perché dovrebbe. Dalla mia lettura della politica sulle stesse origini, top.location
non dovrebbe essere accessibile in tutto, poiché Container.html si trova in un dominio diverso da Breaker.html. Ancora più strano, sembra che top.location sola scrittura:
// Fails if Container.html is on a different domain than Breaker.html
alert(top.location);
Questo è problematico per me perché sto cercando di scrivere codice che permette la mia pagina di essere in un iframe, ma solo se è su lo stesso dominio del suo genitore (o si trova su un dominio consentito configurato). Tuttavia, sembra impossibile determinarlo, poiché la stessa politica sulle origini mi nega l'accesso alla sede del genitore.
Così Ho due domande, fondamentalmente:
Perché la sopra Code Breaker telaio di lavoro a tutti?
C'è un modo per interrompere i frame in modo condizionale, o l'unico controllo che si può fare è se
top !== self
? (In particolare, voglio essere in grado di leggere dominio, in modo che possa fornire un elenco di domini consentiti; semplicemente controllando se sono nello stesso dominio o no, non sarebbe l'ideale.)
"Lo stesso criterio di origine impedisce a un documento o uno script caricato da un'origine di ottenere ** o di impostare ** le proprietà di un documento da un'altra origine." - questo è il posto dove vengo appeso. Inoltre, ho pensato di fare il n. 2, ma voglio anche consentire agli amministratori di specificare quali domini sarebbe meglio inquadrare all'interno - Riformero la domanda. –
Scrivere su top.location.href non imposta alcuna proprietà di un documento estraneo; invece, scarica il documento precedente e ne carica uno nuovo al suo posto. – eswald
@Daniel: Il mio commento sulla differenza è stato pensato per essere da una prospettiva pragmatica, non da una prospettiva di specifiche tecniche. Il mio punto era che non era un problema di sicurezza legittimo e quindi era legale, piuttosto che suggerire che le specifiche dicevano che era OK. – Brian