この質問は以前に質問され、正しく回答されましたが、解決策が投稿されていないようです。
サイトにiframeがあり、それらが別のドメインのフレームに囲まれないようにしたい場合、単純なフレームバスティングは役に立ちません。
<script>if (top != self) top.location = location</script>
ただし、他のドメインへのクロスフレームスクリプトは例外を生成するはずなので、次のようなものはiframe内でうまく機能するようです。
<script>
try {
if (window.document.domain != top.document.domain) { // throws exception
throw "You naughty puppy!"; // Should not ever get here, right?
}
}
catch () {
top.location = "/error/naughtypuppy";
}
</script>
上記if
は、iframeのクロスドメインフレーミングを防ぐのに十分なはずです。false
例外を返すかスローするだけでよいので、とにかくスクリプトがthrow
ブラウザのステートメントに到達する可能性はありますか?
これは、他のドメインからのフレーミングのみを防ぐのに十分でしょうか?
<script>
try {
var bogus = top.document.domain;
}
catch () {
top.location = "/error/naughtypuppy";
}
</script>
編集:同様の解決策がここで示唆されていますが、フレームバスティングコードを含めるために親フレームに依存することはありません。iframeがクロスドメインであるかどうかを検出し、それを無効にします。基本的に、「例外が発生した場合は、他のフレームにアクセスしてバストを試行する」と同じソリューションです。