他のサイトがあなたのサイトを「フレーム化」したくないとしましょう<iframe>
:
<iframe src="http://example.org"></iframe>
したがって、すべてのページにアンチフレーミング、フレーム バスティング JavaScript を挿入します。
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
優秀な!これで、含まれている iframe から自動的に「バスト」またはブレークアウトします。1 つの小さな問題を除いて。
結局のところ、ここに示すように、フレーム バスティング コードがバストされる可能性があります。
<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>
このコードは次のことを行います。
window.onbeforeunload
ブラウザーがイベント ハンドラーを介して現在のページから移動しようとするたびに、カウンターをインクリメントします。- を介してミリ秒ごとに起動するタイマーを設定し
setInterval()
、カウンターが増加したことを確認すると、現在の場所を攻撃者が制御するサーバーに変更します - そのサーバーは HTTP ステータス コード204でページを提供します。これにより、ブラウザはどこにも移動しません。
私の質問は、これは実際の問題というよりも JavaScript のパズルに近いものですが、どうすればフレーム バスティング バスターを無効にできるでしょうか?
いくつかの考えがありましたが、私のテストでは何も機能しませんでした:
onbeforeunload
経由でイベントをクリアしようとしてonbeforeunload = null
も効果がありませんでした- 停止したプロセスを追加すると
alert()
、プロセスが発生していることをユーザーに知らせることができますが、コードに干渉することはありません。[OK] をクリックすると、バスティングが通常どおり続行されます setInterval()
タイマーをクリアする方法が思いつかない
私はあまり JavaScript プログラマーではないので、ここであなたに挑戦します。ねえ、バスター、フレームバスター バスターをバストできますか?