ページの読み込み中に、自分のページがフレームとして他のサイトに埋め込まれていることを確認するにはどうすればよいですか?リファラーリクエストヘッダーはここでは役に立たないと思いますか?ありがとう。
ページの読み込み中に、自分のページがフレームとして他のサイトに埋め込まれていることを確認するにはどうすればよいですか?リファラーリクエストヘッダーはここでは役に立たないと思いますか?ありがとう。
回答:
サーバー側からは確認できませんが、ページの読み込み後にjavascriptを使用して検出できます。比較top
してself
、それらが同一でない場合は、フレーム内にいます。
さらに、一部の最新のブラウザーはX-FRAME-OPTIONS
ヘッダーを尊重します。ヘッダーには2つの値があります。
ユーザーには、フレームに埋め込むことができないGoogleのPicasaが含まれます。
最小バージョンのヘッダーをサポートするブラウザー:
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は無効にできることに注意してください。
以下のために近代的なブラウザでは、標準であるCSP(コンテンツセキュリティポリシー)を、使用することができます。次のヘッダーは、ドキュメントがフレーム内のどこにでも読み込まれないようにします。
Content-Security-Policy: frame-ancestors 'none'
(X-
ただし、IE 11にはプレフィックスが必要です)。'none'
自分のサイトなど、フレーミングが許可されている原点に変更することもできます。
古いブラウザをカバーするために、これは@Maerlynの回答と一緒に使用するのが最適です。
javascriptを使用してiframeにページが読み込まれないようにすることができます
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
このコードは、ページのiframeのコンテナのアドレスをページアドレスに変更し、コンテナにページを表示させます。
sandbox
iframeの属性により、このようなフレーミングエスケープハックを禁止できます。したがって、セキュリティの問題が懸念される場合、この方法はフレーミングを防ぐための安全な方法ではありません。
または、特定の場所でコンテンツを気にせず、特定のサイトでコンテンツを望まない場合は、特定のドメインをブロックできます。たとえば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ビデオに送信します。事実上、彼らは自分たちをリックロールしただけです。
<?php
header("Content-Security-Policy: frame-ancestors 'none'");
?>