ページの読み込み中に、自分のページが他のサイトのフレームとして埋め込まれていることを確認するにはどうすればよいですか?リファラーリクエストヘッダーはここで私を助けることができないと思いますか?ありがとう。
サーバー側から確認することはできませんが、ページが読み込まれた後に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'
(ただし、IE 11ではX-
プレフィックスが必要です)。 'none'
を、自分のサイトなど、フレーミングが許可されているOriginに変更することもできます。
古いブラウザをカバーするには、 @ Maerlyn's answer と一緒に使用するのが最適です。
javaScriptを使用してiframeにページをロードしないようにすることができます
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
このコードは、ページの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ビデオに罰として送信します。実際には、彼らは自分自身をリックロールしました。
Javascriptを使用して、phpファイルの最後に次のスクリプトを配置してiframeにロードされたかどうかを確認し、iframeを使用してページをロードしないように警告または通知を表示するページにリダイレクトします。
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>