X-Frame-Options
を使用できないWebページがあり、クリックジャッキング保護がJavaScriptベースである必要があるとします。このページでは、すべての機密アクションと機密情報の表示はJSに基づいているため、質問のために、JSが有効で実行中であると想定できます。
現在の標準的な手法では、self
とtop
を比較し、結果に応じてコンテンツを表示します。 OWASPの例 :
<style id="antiClickjack">body{display:none !important;}</style>
そして、スクリプト内の直後のIDでそのスタイルを削除します。
<script type="text/javascript">
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>
JSがself
をtop
と等しいと見なすまでコンテンツは表示されないため、このアプローチを「フェールクローズ」と呼びます。
self
がnotがtop
と等しい場合、コンテンツがCSSまたはdocument.body.innerHTML=''
。
質問:後者の保護は、otherを使用する以外の方法でバイパスできます親のiframeのsandbox
属性?
これを読むまではそう思いませんでした ブログのコメント 2つの手法を比較して、「フェールオープン」が十分安全かどうか疑問に思いました。
「親ページでさまざまなJSペイロードを使用して、iframe内のフレームバスティングスクリプトが失敗し、ページのコンテンツが非表示にならないようにすることができます。[...]代わりに、ページのコンテンツを表示するもの額装されていなかったし、今でも完全に元気です。」
引用したOWASPの記事にあるように、 ページの下の方にいくつかの例 があります。例えば。これは、フレームバスターのコードがまったく読み込まれないようにするためのものです。
<iframe src="http://www.victim.com/?v=<script>if">
これは security headers を使用することで軽減できます。
X-XSS-Protection: 1; mode=block
これにより、このようなクエリ文字列攻撃が発生した場合にページ全体がレンダリングされなくなります。