Content-Security-Policy (CSP)

 

Contents Security Policy(CSP)概要

Content Security Policy(CSP)とは、ブラウザのセキュリティ機能の一種。
Webサーバからのコンテンツをブラウザで表示する箇所での攻撃(クロスサイトスクリプティング・クリックジャッキングなど)をブロックする機能。
そのページが読み込める(埋め込める)リソースの条件を指定し制限することで、攻撃のリスクを軽減できる。
ただし、Webサイトの根本的な脆弱性を解決していないため、CSPの制限を回避して攻撃を実行される恐れがあるため注意が必要。
 

設定方法

以下の構文のように、レスポンスのContent-Security-Policyヘッダの値に、「<ディレクティブ> <値>」の塊を「;」区切りで命令を記述する。
 

ディレクティブの一覧

ディレクティブは「フェッチディレクティブ」「文書ディレクティブ」「ナビゲーションディレクティブ」「報告ディレクティブ」の4種類に主に分類される。
ディレクティブ一覧や詳細な仕様はmdn web docsを参照。
 

フェッチディレクティブ

リソースの読み込み先を制御する。
 
【例】「https://example.com」のみJavaScriptの読み込みを許可する。

文書ディレクティブ

 
【例】文書内の<base>要素で使用可能なURLを「https://example.com」のみに制限する。

ナビゲーションディレクティブ

ユーザが遷移できるページや、情報の送信先を制御する。
 
【例】フォームの送信先のURLを同一オリジンのみに制限する。
 

報告ディレクティブ

設定したCSPのポリシー違反があった場合、指定したURLに通知する。
 
【例】設定したCSPのポリシー違反があった場合、「https://example.com」宛てに通知する。
 

ディレクティブの値一覧

説明
'self'同一オリジンからのみリソースの読み込みを許可
<スキーム>:指定したスキームのリソースの読み込みを許可 【例】https:, http:, data:
<ホスト名>指定ドメインのリソースの読み込みを許可 【例】example.com, https://*.example.com
'unsafe-inline'<script>タグ内のリソースの読み込みを許可
'unsafe-eval' eval関数やFunction関数のリソースの読み込みを許可
'none'何も許可しない
'nonce-<値>'scriptタグ内のnonce属性の値が一致するリソースの読み込みを許可
'hash-<値>'scriptタグ内のnonce属性の値が一致するリソースの読み込みを許可
 

具体的な設定方法

XSSのリスクを軽減する

同一オリジンからのみスクリプトのロードを許可する
 
指定したドメイン(https://example.com)のみスクリプトのロードを許可する
 

クリックジャッキングのリスクを軽減する