web-dev-qa-db-ja.com

クリックジャッキングから保護するために、フレーミングが検出されるまでWebページにコンテンツを表示しても安全ですか?

X-Frame-Optionsを使用できないWebページがあり、クリックジャッキング保護がJavaScriptベースである必要があるとします。このページでは、すべての機密アクションと機密情報の表示はJSに基づいているため、質問のために、JSが有効で実行中であると想定できます。

現在の標準的な手法では、selftopを比較し、結果に応じてコンテンツを表示します。 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がselftopと等しいと見なすまでコンテンツは表示されないため、このアプローチを「フェールクローズ」と呼びます。

selfnottopと等しい場合、コンテンツがCSSまたはdocument.body.innerHTML=''

質問:後者の保護は、otherを使用する以外の方法でバイパスできます親のiframeのsandbox属性?

これを読むまではそう思いませんでした ブログのコメント 2つの手法を比較して、「フェールオープン」が十分安全かどうか疑問に思いました。

「親ページでさまざまなJSペイロードを使用して、iframe内のフレームバスティングスクリプトが失敗し、ページのコンテンツが非表示にならないようにすることができます。[...]代わりに、ページのコンテンツを表示するもの額装されていなかったし、今でも完全に元気です。」

2
kazhtaco

引用したOWASPの記事にあるように、 ページの下の方にいくつかの例 があります。例えば。これは、フレームバスターのコードがまったく読み込まれないようにするためのものです。

<iframe src="http://www.victim.com/?v=<script>if">

これは security headers を使用することで軽減できます。

X-XSS-Protection: 1; mode=block

これにより、このようなクエリ文字列攻撃が発生した場合にページ全体がレンダリングされなくなります。

0
SilverlightFox