84

ページの読み込み中に自分のページがフレームとして他のサイトに埋め込まれていることを確認するにはどうすればよいですか? リファラーリクエストヘッダーはここでは役に立たないと思いますか? ありがとう。

4

9 に答える 9

104

サーバー側から確認することはできませんが、ページが読み込まれた後に JavaScript を使用して検出できます。とを比較topしてself、同じでない場合は、フレームに入っています。

さらに、最新のブラウザーの中にはX-FRAME-OPTIONS、2 つの値を持つことができるヘッダーを尊重するものがあります。

  • DENY – ページがフレームに含まれている場合、ページがレンダリングされないようにします
  • SAMEORIGIN – ページがトップレベルのフレームセット ホルダーと同じドメインに属していない限り、上記と同じです。

ユーザーには、フレームに埋め込むことができない Google の Picasa が含まれます。

最小バージョンのヘッダーをサポートするブラウザー:

  • IE8 と IE9
  • オペラ 10.50
  • サファリ4
  • クローム 4.1.249.1042
  • Firefox 3.6.9 (古いバージョンのNoScript )
于 2010-05-24T11:46:30.230 に答える
46

Stackoverflowには、それをテストするためのJSが含まれています(master.js)。これはそれに関連する部分です:

if(top!=self){
    top.location.replace(document.location);
    alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}

ただし、JSを無効にできることに注意してください。

于 2010-05-24T12:17:04.327 に答える
30

最新のブラウザーでは、標準である CSP (コンテンツ セキュリティ ポリシー) を使用できます。次のヘッダーは、ドキュメントがどこのフレームにも読み込まれないようにします。

Content-Security-Policy: frame-ancestors 'none'

(ただし、IE 11 にはX-プレフィックスが必要です)。'none'自分のサイトなど、フレーミングが許可されているオリジンに変更することもできます。

古いブラウザーをカバーするには、これを@Maerlyn's answerと一緒に使用するのが最適です。

于 2014-08-17T21:44:50.787 に答える
15

javascriptを使用してiframeにページが読み込まれないようにすることができます

<script type="text/javascript">
if ( window.self !== window.top ) {
    window.top.location.href=window.location.href;
}
</script>

このコードは、ページの iframe のコンテナーのアドレスをページ アドレスに変更し、コンテナーに強制的にページを表示します。

于 2013-12-10T11:28:53.897 に答える
6

または、一部の場所ではコンテンツを気にしないが、特定のサイトではコンテンツを使用したくない場合は、特定のドメインをブロックできます。たとえば、offendingdomain.comコンテンツを埋め込む場合は、次のようにすることができます。

<script type="text/javascript">
    if(document.referrer.indexOf("offendingdomain.com") != -1) {
        window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
    }
</script>

offendingdomain.comこれにより、親ドキュメントの場所がチェックされ、コンテンツが埋め込まれているかどうかが確認されます。このスクリプトは、その iframe を特定の有名な YouTube ビデオに罰として送信します。事実上、彼らは自分自身をリックロールしただけです。

于 2013-11-19T17:31:11.973 に答える
3

javascriptを使用して、phpファイルの最後に次のスクリプトを配置してiframeに読み込まれたかどうかを確認し、警告を表示するページにリダイレクトするか、iframeを使用してページを読み込まないように注意してください。

<script type="text/javascript">
if(top.location != window.location) {
    window.location = '/error_iframe.php';
}
</script>
于 2010-05-24T13:49:14.193 に答える
0

ヘッダーの上でこのPHPコードを使用しています

if($_SERVER['SERVER_NAME'] != 'yourwebsite.com'){
   header('location: yourwebsite.com');
}

誰かがあなたのサイトをiframeした場合、あなたのウェブサイトにリダイレクトされます

于 2021-06-04T07:16:04.933 に答える