他のサイトにあなたのサイトを「フレーム」にしたくないとしましょう<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プログラマーではないので、ここで私の課題を説明します。バスター、フレームバストバスターをバストできますか?
example.org
は、RFC 2606 ietf.org/rfc/rfc2606.txt