iFrameのサードパーティサイトフレームを介して自分のサイトページが読み込まれないようにする方法


81

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


こんにちは、ジョン、ここで完全な解決策が必要だとは言えません。方向を変えるだけで十分です。質問に対する答えを見つけたら、常に答えとして投稿します。これがコミュニティに参加できる唯一の方法です。
abovesun 2010年

注:メタタグの設定は役に立ちません!たとえば、<meta http-equiv = "X-Frame-Options" content = "deny">は効果がありません。使用しないでください!以下の例のようにHTTPヘッダーを介して設定することによってのみ、X-Frame-Optionsが機能します。developer.mozilla.org/fr/docs/Web/HTTP/Headers/X-Frame-Options
Hosam Elzagh

回答:


102

サーバー側からは確認できませんが、ページの読み込み後にjavascriptを使用して検出できます。比較topしてself、それらが同一でない場合は、フレーム内にいます。

さらに、一部の最新のブラウザーはX-FRAME-OPTIONSヘッダーを尊重します。ヘッダーには2つの値があります。

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

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

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

  • IE8およびIE9
  • Opera 10.50
  • サファリ4
  • Chrome 4.1.249.1042
  • Firefox 3.6.9(NoScriptを使用した古いバージョン)

2
私はGoogle検索を経由して、ここでつまずいたので、私はFirefoxがFF3.6.9 8月、2010年にX-FRAME-OPTIONSを追加したことを追加します: michael-coates.blogspot.com/2010/08/...
ThePants


44

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は無効にできることに注意してください。


このアプローチは、コンテンツをiframeに配置している人、またはiframeでコンテンツを閲覧しているサイトのエンドユーザーにメッセージを送信する場合に特に便利です。
kevinmicke 2017

30

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

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

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

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


1
あなたの答えは、十分な敬意を持って十分に明確ではありません。これはヘッダーコードですか、それともPHPですか?例えば。
ゲイリーカーライルクック

2
@GaryCarlyleCookこれは、ページを提供するときにブラウザへの応答の一部である必要があるHTTPヘッダーです。PHPを使用して送信することはできますが、PHPコードではありません。header()を
rvighne 2016

15

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

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

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


1
sandboxiframeの属性により、このようなフレーミングエスケープハックを禁止できます。したがって、セキュリティの問題が懸念される場合、この方法はフレーミングを防ぐための安全な方法ではありません。
フレデリック

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ビデオに送信します。事実上、彼らは自分たちをリックロールしただけです。


3

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.