Ich habe kürzlich Code frame breaking untersucht und bin auf einige wirklich seltsame Verhalten im Zusammenhang mit der same origins policy, die ich habe Probleme zu verstehen.Warum funktionieren Frame Breaker domänenübergreifend und können Sie Frame Breaker bedingt verwenden?
nehme ich eine Seite Breaker.html auf Domäne A haben, und eine Seite Container.html auf Domäne B Das Beispiel Rahmen Brecher Code würde in Breaker.html gehen, wie unten:
if (top !== self) top.location.href = self.location.href;
Dies wird Breaker.html erfolgreich aus Container.html entfernen, aber ich verstehe nicht, warum es so sein sollte. Von meiner Richtlinie zum Lesen derselben Herkunft sollte top.location
nicht zugänglich sein überhaupt, da Container.html auf einer anderen Domäne als Breaker.html ist. Auch eigenartiger scheint es, dass top.location write-only:
// Fails if Container.html is on a different domain than Breaker.html
alert(top.location);
Dies ist für mich problematisch, weil ich versuche, Code zu schreiben, meine Seite in einem Iframe sein kann, aber nur, wenn es auf die gleiche Domäne wie das übergeordnete Element (oder auf einer konfigurierten zulässigen Domäne). Es scheint jedoch unmöglich zu sein, dies zu bestimmen, da die Politik der gleichen Herkunft mir den Zugang zum Aufenthaltsort der Eltern verweigert.
Also habe ich zwei Fragen bekommt, im Grunde:
Warum wird die oben gar breaker Coderahmen Arbeit?
Gibt es eine Möglichkeit, Rahmen bedingt zu brechen, oder ist die einzige Prüfung, die man tun kann, ob
top !== self
? (Insbesondere mag ich in der Lage sein, die Domain zu lesen, so dass ich eine Liste der zulässigen Domains zur Verfügung stellen kann, einfach zu überprüfen, ob ich in der gleichen Domäne bin oder nicht wäre nicht ideal.)
"Die gleiche Ursprungsrichtlinie verhindert, dass ein Dokument oder Skript, das von einem Ursprung geladen wurde, ** Eigenschaften eines Dokuments von einem anderen Ursprung erhält ** oder setzt." - hier werde ich aufgehängt. Außerdem habe ich darüber nachgedacht, # 2 zu machen, aber ich möchte auch zulassen, dass Admins angeben, in welchen Domains es in Ordnung wäre, dass sie darin enthalten sind - ich werde die Frage neu formulieren. –
Das Schreiben in top.location.href legt keine Eigenschaften eines fremden Dokuments fest; Stattdessen wird das vorherige Dokument entladen und stattdessen ein neues geladen. – eswald
@Daniel: Mein Kommentar zu dem Unterschied sollte aus einer pragmatischen Perspektive stammen, nicht aus einer technischen Spezifikationsperspektive. Mein Punkt war, dass es kein legitimes Sicherheitsproblem war und daher legal war, anstatt darauf hinzuweisen, dass die Spezifikation es für OK hielt. – Brian