web-dev-qa-db-ja.com

次のクリックジャッキング攻撃を防ぐ方法は?

Security属性は、iFrameソースに実装されたJSを無効にすることによりiFrameでのXSS攻撃を防ぐために実装されました。したがって、XSS攻撃を実際に排除するだけでなく、フレームバスター、キラーなどのセキュリティスクリプトも無効にします。

たとえば、次の3つのページがあります。

被害者のページ

<html>
<head>
<script type="text/javascript">
if(top != self) top.location.replace(location);
</script>
</head>
<body bgcolor="red">
<img src="kitten.jpg" width="100%" height="100%">
</body>
</html>

このページには非常に貧弱なフレームバスターが含まれていますが、このデモには十分です。ページが彼のウィンドウの一番上のフレームでない場合は、ウィンドウをページの場所にリダイレクトします。

Aページ

<html>
<body>
<center><iframe src="noIFrame.htm" border=1>    </center>
</body>
</html>

このページには、セキュリティ属性を有効にせずに、攻撃者がiframeを使用してページを追加した場合の例が含まれています。このページを開くと、クリックジャッカーページが一目でわかり、ブラウザがページの場所にリダイレクトされます。

Bページ

<html>
<body>
<center><iframe src="noIFrame.htm" security="restricted" border=1></center>
</body>
</html>

最後に、このページでは、セキュリティ属性の実装を示します。 iFrameが読み込まれ、属性が制限に設定されているため、フレーム無効化スクリプトはブラウザを被害者のページの場所にリダイレクトしていません。この攻撃はIE8以降でのみ実行可能であることに注意してください。

次に、悪意のあるユーザーが被害者のWebサーバーにファイルをアップロードできると想定します(X-Frame-Optionsの可能な使用法を理解して無効にします)。被害者はどのようにしてWebサイトを彼のIEユーザー?

* これは架空の質問です。もちろん、攻撃者がWebサーバードメインにアクセスできる場合、攻撃方法は異なります。

2
Boaz Tirosh

IEが古すぎてX-Frame-Optionsをサポートできないバージョン)でクリックジャッキングを防ぐ唯一の方法は、ページをJavaScriptに依存させることです。これにより、security="restricted"で実行するとページが壊れます。 。 例えば:

<style type="text/css">
   body.notframed #warning { display: none; }
   body.framed #content { display: none; }
</style>
<body class="framed">
   <script type="text/javascript">
       if (top==self)
           document.body.className= 'notframed';
   </script>
   <div id="content">
       ...
   </div>
   <div id="warning">
       This site cannot be used in a frame or with JavaScript disabled.
   </div>
</body>

明らかに、これはアクセシビリティに非常に悪い影響を与えます。問題のサイトがJSなしですでに機能しない場合は、それは許容できるかもしれませんが、通常はそれだけの価値はありません。

(また、「非常に貧弱」なフレームバスターのようにトップページをリダイレクトしようとするのではなく、ページを使用不可にする戦術も示しています。実際、リダイレクトオプションは安全にすることができません。)

最後のコメントが何を指しているのかわかりません-X-Frame-Optionsはファイルのアップロードを妨げませんが、唯一の問題であるサイト(サードパーティまたはファーストパーティ)からのフレーミングから保護するためにうまく機能します古いバージョンのIEでのサポートの欠如です。

3
bobince