1. ホーム
  2. javascript

[解決済み] フレームバスターバスター ... バスターコード必要

2022-03-23 13:48:51

質問

例えば、他のサイトがあなたのサイトを <iframe> :

<iframe src="http://example.org"></iframe>

そこで、すべてのページにアンチフレーム、フレームバスターのJavaScriptを挿入するのです。

/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }

素晴らしい! これで、quot;bust" を含むすべての 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のプログラマーとしてはあまり得意ではないので、ここであなたに挑戦してみましょう。 ねぇバスター、フレーム破壊バスターを破壊できる?

解決方法は?

実行可能かどうかわかりませんが、フレームを壊すことができないのであれば、警告を表示すればよいのではないでしょうか。例えば、あなたのページがトップページでない場合、フレームを壊そうとするsetIntervalメソッドを作成します。3、4回試してもトップページでない場合は、ページ全体をカバーする div 要素(モーダルボックス)を作成し、メッセージとリンクを表示します。

<ブロッククオート

このページは未承認のフレームウィンドウで表示されています - (ブラブラ...潜在的なセキュリティ問題)

この問題を解決するには、このリンクをクリックしてください。

ベストとは言えないが、スクリプトでどうにかするのは無理だろう。