Einige Websites verfügen über Code zum "Ausbrechen" von IFRAME
Gehäusen. Wenn eine Seite A
als IFRAME
in eine übergeordnete Seite geladen wird, leitet P
Javascript in A
das äußere Fenster weiter A
.
Normalerweise sieht dieses Javascript ungefähr so aus:
<script type="text/javascript">
if (top.location.href != self.location.href)
top.location.href = self.location.href;
</script>
Meine Frage lautet: Wie kann ich als Autor der übergeordneten Seite P
und nicht als Autor der inneren Seite diesen Ausbruch A
verhindern A
?
PS Es scheint mir, dass es sich um eine Cross-Site-Sicherheitsverletzung handeln sollte, ist es aber nicht.
javascript
html
iframe
Jason Cohen
quelle
quelle
Antworten:
Versuchen Sie es mit der Eigenschaft onbeforeunload, mit der der Benutzer auswählen kann, ob er von der Seite weg navigieren möchte.
Beispiel: https://developer.mozilla.org/en-US/docs/Web/API/Window.onbeforeunload
In HTML5 können Sie die Sandbox-Eigenschaft verwenden. Bitte sehen Sie Pankrats Antwort unten. http://www.html5rocks.com/de/tutorials/security/sandboxed-iframes/
quelle
postMessage
. Dies ist kein Sicherheitsrisiko, aber jemand möchte vielleicht wissen, dass diese Funktion vorhanden ist, wenn er Ihren Kommentar sieht. :)sandbox
.Mit HTML5 wurde das iframe-Sandbox- Attribut hinzugefügt. Zum Zeitpunkt des Schreibens funktioniert dies unter Chrome, Safari, Firefox und neueren Versionen von IE und Opera , macht aber so ziemlich das, was Sie wollen:
Wenn Sie Weiterleitungen der obersten Ebene zulassen möchten, geben Sie an
sandbox="allow-top-navigation"
.quelle
sandbox
ist Flash oder ein anderer Objekttyp im Sandbox-Rahmen nichtsandbox
zulässig , sodass die Funktion in vielen Fällen unbrauchbar wird.Ich benutze sandbox = "..."
Top-Navigation ist das, was Sie verhindern möchten. Lassen Sie dies also weg und es wird nicht zugelassen. Alles, was ausgelassen wird, wird blockiert
Ex.
quelle
Nach dem Lesen der w3.org-Spezifikation . Ich habe die Sandbox-Eigenschaft gefunden.
Sie können festlegen
sandbox=""
, wodurch verhindert wird, dass der Iframe umgeleitet wird. Davon abgesehen wird der Iframe auch nicht umgeleitet. Sie verlieren den Klick im Wesentlichen.Beispiel hier: http://jsfiddle.net/ppkzS/1/
Beispiel ohne Sandbox: http://jsfiddle.net/ppkzS/
quelle
Ich weiß, dass es lange her ist, dass die Frage gestellt wurde, aber hier ist meine verbesserte Version, die 500 ms auf jeden nachfolgenden Aufruf wartet, nur wenn der Iframe geladen ist.
und
onload="frameLoad()"
undonreadystatechange="frameLoad();"
müssen dem Frame oder Iframe hinzugefügt werden.quelle
Ich habe einige nützliche Hacks dazu gefunden:
Wie kann ich mithilfe von JS verhindern, dass untergeordnete Iframes umleiten, oder zumindest Benutzer zur Umleitung auffordern?
http://www.codinghorror.com/blog/2009/06/we-done-been-framed.html
http://coderrr.wordpress.com/2009/02/13/preventing-frame-busting-and-click-jacking-ui-redressing/
quelle
Da die Seite, die Sie in den Iframe laden, den "Breakout" -Code mit einem setInterval ausführen kann, ist onbeforeunload möglicherweise nicht so praktisch, da der Benutzer mit "Sind Sie sicher, dass Sie gehen möchten?" Dialoge.
Es gibt auch das iframe-Sicherheitsattribut, das nur unter IE & Opera funktioniert
:((
quelle
In meinem Fall möchte ich, dass der Benutzer die innere Seite besucht, damit der Server seine IP als Besucher sieht. Wenn ich die PHP-Proxy-Technik verwende, denke ich, dass die innere Seite meine Server-IP als Besucher sieht, also ist es nicht gut. Die einzige Lösung, die ich bisher bekommen habe, ist vor dem Laden. Setzen Sie dies auf Ihre Seite:
Dies funktioniert sowohl in Firefox als auch in dem, worauf ich getestet habe. Sie werden Versionen finden, die so etwas wie evt.return (was auch immer) Mist verwenden ... der in Firefox nicht funktioniert.
quelle
Auf diese Weise können Sie alle Aktionen der gerahmten Seite steuern, die Sie nicht ausführen können. Es gilt die Ursprungsrichtlinie für dieselbe Domain .
quelle