X-Content-Security-Policy
X-Content-Security-Policy ( Content Security Policy, CSP ) とは、XSSやデータインジェクション攻撃などの攻撃を軽減します。それらの攻撃は、データ窃盗、サイトの改竄、マルウェアへの感染に使用されます。
読み方
- X-Content-Security-Policy
- えっくす こんてんつ せきゅりてぃ ぽりしー
目次
概要
HTML では、 script, iframe, img タグで外部サイトのコンテンツをページ内に埋め込めます。 JavaScript は、インラインスクリプトや onclick などのイベント属性でも実行できます。
X-Content-Security-Policy ( Content Security Policy, CSP ) とは、XSSやデータインジェクション攻撃などの攻撃を軽減します。それらの攻撃は、データ窃盗、サイトの改竄、マルウェアへの感染に使用されます。
X-Content-Security-Policy は、 meta タグで利用できません。
X-Content-Security-Policy ヘッダでは、対象とするファイルの種類を指定するディレクティブと許可するドメインやプロトコル、ポートを指定するソースのペアを指定します。 ペアは、 ; で区切って、複数指定できます。
XSSの軽減
CSP は、ホワイトリストに含まれるドメインから受信したスクリプトだけを実行します。 つまり CSP は、XSS の軽減となります。
クリックジャッキングの軽減
CSP は、クリックジャッキング を軽減します。
CSP は、どのサイトが、リソースを iframe で埋め込むか、サイトを指定できます。その結果、攻撃を防ぐことができます。
パケット盗聴攻撃の軽減
コンテンツが読み込まれるドメインを制限し、許可するプロトコルをサーバが指定できます。 すべてのコンテンツがHTTPSを使用して読み込まれるように、サーバが指定できます。
使い方
書式
X-Content-Security-Policy: allow ホスト... [; options {inline-script | eval-script}...] [; img-src ホスト...][; media-src ホスト...] [; srcipt-src ホスト...][; object-src ホスト...] [; frame-src ホスト...][; font-src ホスト...] [; xhr-src ホスト...][; frame-ancesors ホスト...] [; style-src ホスト...] [; report-uri URI][; policy-uri URI]
単純な例
default-src ディレクティブは、ほかのディレクティブで指定されなかったリソースの読み込み先のソースを指定します。 self キーワードは、現在のページと同一ドメイン、同一ポートを表します。
X-Content-Security-Policy: default-src 'self'
default-src は、当初 allow という名称でした。 Firefox 5 からは、allow と default-src が同様に扱われます。 Firefox 4 では、default-src ではなく allow ディレクティブを指定します。
互換性のためには、併記します。
X-Content-Security-Policy: default-src 'self'; allow 'self'
X-Content-Security-Policy: allow 'self'
上記の設定は、下記の動作をします。
- インラインスクリプトの実行を禁止します。
-
<script>alert(0);</script>
- script src で読み込まれる Same Origin のサーバからロードされるスクリプトだけが実行されます。
-
<script src="foo.js"></script>
ドメインを指定する例
同一ドメインと foo.com とそのサブドメインのコンテンツを読みこませる例です。
X-Content-Security-Policy: default-src 'self' *.foo.com
タグごとに指定する例
X-Content-Security-Policy: default-src 'self'; img-src *; object-src static.foo.jp; script-src js.foo.jp
JavaScript だけ制限する例
JavaScript だけ同一生成元のサーバからロードし、それ以外は、どこからでも読み込ませます。
X-Content-Security-Policy: default-src *; script-src 'self';
HTTPSを強制する
X-Content-Security-Policy: default-src https://*:443
関連項目
ツイート