Content-Security-Policy
HTTP の Content-Security-Policy レスポンスヘッダーは、ウェブサイト管理者が、あるページにユーザーエージェントが読み込みを許可されたリソースを管理できるようにします。いくつかの例外を除いて、大半のポリシーにはサーバーオリジンとスクリプトエンドポイントの指定を含んでいます。これはクロスサイトスクリプティング攻撃 (クロスサイトスクリプティング) を防ぐのに役立ちます。
より詳細な情報は、Content Security Policy (CSP) の入門記事を参照してください。
構文
http
Content-Security-Policy: <policy-directive>; <policy-directive>
ここで、 <policy-directive> は <directive> <value> の形であり、内部に区切り文字はありません。
ディレクティブ
フェッチディレクティブ
フェッチディレクティブは、特定のリソース種別を読み込むことができる場所を制御します。
child-src-
ウェブワーカーと、
<frame>や<iframe>のような要素によって読み込まれる入れ子の閲覧コンテキストのための有効なソースを定義します。警告: 複合した閲覧コンテキストやワーカーを制御するには、
child-srcの代わりに、それぞれframe-srcおよびworker-srcを使用してください。 connect-src-
スクリプトインターフェイスによって読み込まれる URL を制限します。
default-src-
別の Fetch ディレクティブに対する代替として提供します。
font-src-
@font-faceによって読み込まれるフォントのための有効なソースを指定します。 frame-src-
<frame>や<iframe>のような要素によって読み込まれる入れ子のコンテンツの閲覧のための有効なソースを指定します。 img-src-
画像やファビコンのための有効なソースを定義します。
manifest-src-
アプリケーションのマニフェストファイルのための有効なソースを指定します。
media-srcobject-src-
<object>、<embed>、<applet>要素のための有効なソースを指定します。メモ:
object-srcで制御される要素は、おそらく古い HTML 要素に該当すると見なされ、標準化された新しい機能が利用できません(セキュリティ属性のsandboxや<iframe>のallowなど)。従って、このフェッチディレクティブで制限を掛けることが推奨されます (例えば、可能であればobject-src 'none'を設定するなど)。 prefetch-srcExperimental-
事前にフェッチされるか描画される有効なソースを指定します。
script-src-
JavaScript および WebAssembly のための有効なソースを指定します。
script-src-elem-
JavaScript の
<script>要素のための有効なソースを指定します。 script-src-attr-
JavaScript のインラインイベントハンドラーのための有効なソースを指定します。
style-src-
スタイルシートのための有効なソースを指定します。
style-src-elem-
スタイルシートの
<style>および<link>要素にrel="stylesheet"がついたものののための有効なソースを指定します。 style-src-attr-
個々の DOM 要素に適用されるインラインスタイルの有効なソースを指定します。
worker-src-
Worker、SharedWorker、ServiceWorkerスクリプトのための有効なソースを指定します。
文書ディレクティブ
ナビゲーションディレクティブ
ナビゲーションディレクティブは、例えばユーザーが移動する場所やフォームを送信する場所を管理します。
form-action-
指定のコンテキストからフォームの送信先として使用される URL を制限します。
frame-ancestors-
<frame>、<iframe>、<object>、<embed>、<applet>によってページに埋め込まれた有効な親を指定します。 -
<form>(form-actionが指定されていない場合)、<a>、window.location、window.openなど、あらゆる方法で文書からナビゲーションを行うことができる URL を制限します。
報告ディレクティブ
報告ディレクティブは CSP 違反の報告過程を制御します。 Content-Security-Policy-Report-Only ヘッダーも参照してください。
report-uri非推奨-
ユーザーエージェントにコンテンツセキュリティポリシーの違反を報告するよう指示します。これらの違反の報告は、 JSON 文書を HTTP の
POSTリクエストで指定された URI に送信することで行われます。警告:
report-toディレクティブは非推奨のreport-uriディレクティブを置き換えることを意図していますが、report-toはまだ多くのブラウザーが対応していません。そのため、ブラウザーでreport-toの対応が行われるまでは、現在のブラウザーとの互換性のため、report-uriとreport-toの両方を指定することができます。http
Content-Security-Policy: …; report-uri https://endpoint.example.com; report-to groupnamereport-toに対応しているブラウザーでは、report-uriディレクティブは無視されます。 report-to-
SecurityPolicyViolationEventを発生させます。
その他のディレクティブ
require-trusted-types-forExperimental-
DOM XSS インジェクションシンクで Trusted Types を強制します。
trusted-typesExperimental-
Trusted Types ポリシーのホワイトリストを指定するために使用します (Trusted Types は、アプリケーションが DOM XSS インジェクションシンクをロックダウンして、文字列の代わりにスプーフィング不可能な型付きの値のみを受け入れるようにします)。
upgrade-insecure-requests-
安全でない URL (HTTP で提供されているもの) をすべて安全な URL (HTTPS で提供されているもの) に置き換えたかのように扱うようにユーザエージェントに指示します。このディレクティブは、書き換えが必要な安全でない古い URL が大量にあるウェブサイトを対象としています。
非推奨のディレクティブ
block-all-mixed-content非推奨-
ページが HTTPS を使用して読み込まれた際に、 HTTP を使用して資産を読み込むことを防止します。
plugin-types非推奨 Non-standard-
読み込まれるリソースの種類を限定することで、文書に埋め込まれるプラグインの組を制限します。
referrer非推奨 Non-standard-
ページから離れる際の Referer (綴り注意) ヘッダー内の情報を指定するために使用されていました。代わりに
Referrer-Policyヘッダーを使用してください。
値
許可さ れている値の概要を以下に示します。 詳細な参照は、CSP ソース値 および各ディレクティブのドキュメントを参照してください。
キーワード値
'none'-
すべてのリソースの読み込みを許可しません。
'self'-
現在のオリジンからのみリソースの読み込みを許可します。
'strict-dynamic'-
ページ内のスクリプトに付随する nonce やハッシュによって与えられた信頼は、それが読み込むスクリプトに拡張されます。
'report-sample'-
違反したコードのサンプルを違反レポートに含めて記載することを要求する。
unsafe キーワード値
'unsafe-inline'-
インラインリソースの使用を許可します。
'unsafe-eval'-
evalやsetImmediate(en-US) Non-standard 、window.execScriptNon-standard のような動的コード評価の使用を許可します。 'unsafe-hashes'-
特定のインラインイベントハンドラーを有効にすることができます。
'unsafe-allow-redirects'Experimental-
TBD
ホスト値
- Host
- 指定されたホストからのリソースの読み込みのみを許可します。オプションでスキーム、ポート番号、パスを指定することができます。例えば、
example.com,*.example.com,https://*.example.com:12/path/to/file.jsなどです。 - CSP 内の
/で終わるパス部分は、その接頭辞であるすべてのパスに一致します。例えば、example.com/api/はexample.com/api/users/newのような URL に一致します。 - CSP の他のパス属性の部分は正確に照合されます。例えば、
example.com/file.jsはhttp://example.com/file.jsとhttps://example.com/file.jsには一致しますが、https://example.com/file.js/file2.jsに一致するわけではありません。
- 指定されたホストからのリソースの読み込みのみを許可します。オプションでスキーム、ポート番号、パスを指定することができます。例えば、
- Scheme
- 特定のスキームによるリソースの読み込みのみを許可します。常に "
:" で終える必要があります。例:https:,http:,data:など
- 特定のスキームによるリソースの読み込みのみを許可します。常に "
その他の値
'nonce-*'-
スクリプトを許可するための暗号化された (一度しか使われない) ノンスです。サーバーは、ポリシーを送信するたびに、一意のノンス値を生成する必要があります。リソースのポリシーを迂回することは容易ではないため、推測されないノンスを提供することが重要です。これは script の nonce 属性と組み合わせて使用します。例えば、
nonce-DhcnhD3khTMePgXwdayK9BsMqXjhguVV 'sha*-*'-
sha256、sha384、sha512 のいずれかです。その後にダッシュと sha* の値が続きます。例:
sha256-jzgBGA4UWFFmpOBq0JpdsySukE1FrEN5bUpoK8Z29fY=
ワーカー内の CSP
ワーカーは、一般的に文書 (もしくは親ワーカー) のコンテンツセキュリティポリシーによって管理されません。ワーカーに対してコンテンツセキュリティポリシーを指定するには、ワーカースクリプト自身が要求したリクエストに対して Content-Security-Policy レスポンスヘッダーを設定して下さい。
ワーカースクリプトのオリジンがグローバルで一意の識別子の場合 (例えば、URL がデータやブロブのスキーマの場合) は例外です。この場合、ワーカーは文書もしくは作成元のワーカーのコンテンツセキュリティポリシーを継承します。
複数の CSP
CSP では、Content-Security-Policy ヘッダー、Content-Security-Policy-Report-Only ヘッダーや <meta> 要素を経由したものを含む、リソースに対して複数のポリシーを指定することができます。
以下の例のように、 Content-Security-Policy ヘッダーを複数回使うことができます。ここでは connect-src ディレクティブに特に注意してください。 2 つ目のポリシーでは接続を許可しているにもかかわらず、 1 つ目のポリシーには connect-src 'none' が含まれています。追加のポリシーを追加しても、保護されたリソースの機能がさらに制限することができるだけで、接続は許可されず、最も厳密なポリシーとして connect-src 'none' が強制されます。
http
Content-Security-Policy: default-src 'self' http://example.com;
connect-src 'none';
Content-Security-Policy: connect-src http://example.com/;
script-src http://example.com/
例
例: 安全でないインラインの eval を無効にし、https 経由でのリソース (画像、フォント、スクリプトなど) 読み込みを許可します。
HTTP ヘッダーの使用
http
Content-Security-Policy: default-src https:
HTML の meta 要素の使用
html
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
例: 修正のためにインラインコードを多用している既存のサイトで、https 経由でのみ読み込まれるリソースを明確にし、プラグインを無効にします。
http
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
例: 上記のポリシーを実装せず、代わりに、発生するであろう違反を報告します。
http
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/
その他の例は、Mozilla Web Security Guidelines を参照して下さい。
仕様書
| Specification |
|---|
| Content Security Policy Level 3 # csp-header |
ブラウザーの互換性
BCD tables only load in the browser