Content-Security-Policy (CSP)
Contents Security Policy(CSP)概要設定方法ディレクティブの一覧フェッチディレクティブ文書ディレクティブナビゲーションディレクティブ報告ディレクティブディレクティブの値一覧具体的な設定方法XSSのリスクを軽減するクリックジャッキングのリスクを軽減する
Contents Security Policy(CSP)概要
Content Security Policy(CSP)とは、ブラウザのセキュリティ機能の一種。
Webサーバからのコンテンツをブラウザで表示する箇所での攻撃(クロスサイトスクリプティング・クリックジャッキングなど)をブロックする機能。
そのページが読み込める(埋め込める)リソースの条件を指定し制限することで、攻撃のリスクを軽減できる。
ただし、Webサイトの根本的な脆弱性を解決していないため、CSPの制限を回避して攻撃を実行される恐れがあるため注意が必要。
設定方法
以下の構文のように、レスポンスのContent-Security-Policyヘッダの値に、「<ディレクティブ> <値>」の塊を「;」区切りで命令を記述する。
ディレクティブの一覧
ディレクティブは「フェッチディレクティブ」「文書ディレクティブ」「ナビゲーションディレクティブ」「報告ディレクティブ」の4種類に主に分類される。
フェッチディレクティブ
リソースの読み込み先を制御する。
【例】「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)のみスクリプトのロードを許可する