Angenommen, Sie möchten nicht, dass andere Websites Ihre Website in einem Rahmen "rahmen" <iframe>
:
<iframe src="http://example.org"></iframe>
So fügen Sie in alle Ihre Seiten Anti-Framing- und Frame-Busting-JavaScript ein:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
Ausgezeichnet! Jetzt "kaputt" oder brechen Sie automatisch aus einem enthaltenen Iframe aus. Bis auf ein kleines Problem.
Wie sich herausstellt, den Rahmen sprengenden Code kann gesprengt werden , wie hier gezeigt :
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
Dieser Code führt Folgendes aus:
- Erhöht einen Zähler jedes Mal, wenn der Browser versucht, über den
window.onbeforeunload
Ereignishandler von der aktuellen Seite weg zu navigieren - Richtet einen Timer ein, der jede Millisekunde über
setInterval()
ausgelöst wird. Wenn der Zähler erhöht wird, wird der aktuelle Speicherort in einen Server geändert, auf den der Angreifer zugreifen kann - Dieser Server stellt eine Seite mit dem HTTP-Statuscode 204 bereit , wodurch der Browser nirgendwo navigiert
Meine Frage ist - und dies ist eher ein JavaScript-Rätsel als ein tatsächliches Problem -, wie Sie den Frame-Busting-Buster besiegen können.
Ich hatte ein paar Gedanken, aber bei meinen Tests hat nichts funktioniert:
- Der Versuch, das
onbeforeunload
Ereignis über zu löschen,onbeforeunload = null
hatte keine Auswirkung - Durch Hinzufügen eines
alert()
gestoppten Prozesses wurde der Benutzer darüber informiert, dass der Vorgang ausgeführt wurde, der Code wurde jedoch in keiner Weise beeinträchtigt. Wenn Sie auf OK klicken, wird das Busting wie gewohnt fortgesetzt - Ich kann mir keine Möglichkeit vorstellen, den
setInterval()
Timer zu löschen
Ich bin kein großer JavaScript-Programmierer, daher ist hier meine Herausforderung an Sie: Hey Buster, können Sie den Frame-Busting-Buster kaputt machen?
example.org
in RFC 2606 angegeben. Ietf.org/rfc/rfc2606.txt