[解決済み] フレームバスターバスター ... バスターコード必要
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 要素(モーダルボックス)を作成し、メッセージとリンクを表示します。
<ブロッククオートこのページは未承認のフレームウィンドウで表示されています - (ブラブラ...潜在的なセキュリティ問題)
この問題を解決するには、このリンクをクリックしてください。
ベストとは言えないが、スクリプトでどうにかするのは無理だろう。
関連
-
vue ディレクティブ v-html と v-text
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み】SecurityError: オリジンを持つフレームがクロスオリジンフレームにアクセスするのをブロックした
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] 親ページからiframe内のJavaScriptコードを呼び出す
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
親子コンポーネント通信を解決する3つのVueスロット
-
Vue+ElementUIによる大規模なフォームの処理例
-
vue ディレクティブ v-html と v-text
-
[解決済み】ローカルファイルを開くことができません - Chrome: ローカルリソースの読み込みが許可されていない
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】リクエストに失敗していないのに、「TypeError: failed to fetch」が表示される。
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
JavaScriptのStringに関する共通メソッド
-
[解決済み】HTMLフォームのaction属性に空のURLを使用するのは良い方法ですか?(action="")