Content-Security-Policy

HTTP の Content-Security-Policy レスポンスヘッダーは、ウェブサイト管理者が、あるページにユーザーエージェントが読み込みを許可されたリソースを管理できるようにします。いくつかの例外を除いて、大半のポリシーにはサーバーオリジンとスクリプトエンドポイントの指定を含んでいます。これはクロスサイトスクリプティング攻撃 (クロスサイトスクリプティング) を防ぐのに役立ちます。

より詳細な情報は、Content Security Policy (CSP) の入門記事を参照してください。

ヘッダー種別 レスポンスヘッダー
禁止ヘッダー名 いいえ

構文

Content-Security-Policy: <policy-directive>; <policy-directive>

ここで、 <policy-directive> は <directive> <value> の形であり、内部に区切り文字はありません。

ディレクティブ

フェッチディレクティブ

フェッチディレクティブは、特定のリソース種別を読み込むことができる場所を制御します。

child-src (en-US)

ウェブワーカーと、<frame><iframe> のような要素によって読み込まれる入れ子の閲覧コンテキストのための有効なソースを定義します。

警告: 複合した閲覧コンテキストやワーカーを制御するには、 child-src の代わりに、それぞれ frame-src および worker-src を使用してください。

connect-src

スクリプトインターフェイスによって読み込まれる URL を制限します。

default-src

別の Fetch ディレクティブに対する代替として提供します。

font-src (en-US)

@font-face によって読み込まれるフォントのための有効なソースを指定します。

frame-src

<frame><iframe> のような要素によって読み込まれる入れ子のコンテンツの閲覧のための有効なソースを指定します。

img-src

画像やファビコンのための有効なソースを定義します。

manifest-src

アプリケーションのマニフェストファイルのための有効なソースを指定します。

media-src

<audio><video><track> 要素によって読み込むメディアのための有効なソースを指定します。

object-src

<object><embed><applet> 要素のための有効なソースを指定します。

Note: object-src で制御される要素は、おそらく古い HTML 要素に該当すると見なされ、標準化された新しい機能が利用できません (セキュリティ属性の sandbox<iframe>allow など)。従って、このフェッチディレクティブで制限を掛けることが推奨されます (例えば、可能であれば object-src 'none' を設定するなど)。

prefetch-src

事前にフェッチされるか描画される有効なソースを指定します。

script-src

JavaScript のための有効なソースを指定します。

script-src-elem

JavaScript の <script> 要素のための有効なソースを指定します。

script-src-attr (en-US)

JavaScript のインラインイベントハンドラーのための有効なソースを指定します。

style-src

スタイルシートのための有効なソースを指定します。

style-src-elem (en-US)

スタイルシートの <style> および <link> 要素に rel="stylesheet" がついたものののための有効なソースを指定します。

style-src-attr (en-US)

個々の DOM 要素に適用されるインラインスタイルの有効なソースを指定します。

worker-src

WorkerSharedWorkerServiceWorker スクリプトのための有効なソースを指定します。

文書ディレクティブ

文書ディレクティブは、ポリシーが適用される文書またはワーカー環境のプロパティを管理します。

base-uri

文書の <base> 要素で使用される URL を制限します。

sandbox

<iframe>sandbox 属性に類似した要求リソースに対してサンドボックスを有効にします。

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

ナビゲーションディレクティブは、例えばユーザーが移動する場所やフォームを送信する場所を管理します。

form-action (en-US)

指定のコンテキストからフォームの送信先として使用される URL を制限します。

frame-ancestors

<frame><iframe><object><embed><applet> によってページに埋め込まれた有効な親を指定します。

navigate-to (en-US)

<form> (form-action (en-US) が指定されていない場合)、<a>window.locationwindow.open など、あらゆる方法で文書からナビゲーションを行うことができる URL を制限します。

報告ディレクティブ

報告ディレクティブは CSP 違反の報告過程を制御します。 Content-Security-Policy-Report-Only ヘッダーも参照してください。

report-uri (en-US)

ユーザーエージェントにコンテンツセキュリティポリシーの違反を報告するよう指示します。これらの違反の報告は、 JSON 文書を HTTP の POST リクエストで指定された URI に送信することで行われます。

Warning: report-to ディレクティブは非推奨の report-uri ディレクティブを置き換えることを意図していますが、 report-to はまだ多くのブラウザーが対応していません。そのため、ブラウザーで report-to の対応が行われるまでは、現在のブラウザーとの互換性のため、 report-urireport-to の両方を指定することができます。

Content-Security-Policy: ...; report-uri https://endpoint.example.com; report-to groupname

report-to に対応しているブラウザーでは、 report-uri ディレクティブは無視されます。

report-to

SecurityPolicyViolationEvent を発生させます。

その他のディレクティブ

require-sri-for

ページ上のスクリプトやスタイルに SRI の使用を要求します。

require-trusted-types-for (en-US)

DOM XSS インジェクションシンクで Trusted Types を強制します。

trusted-types

Trusted Types ポリシーのホワイトリストを指定するために使用します (Trusted Types は、アプリケーションが DOM XSS インジェクションシンクをロックダウンして、文字列の代わりにスプーフィング不可能な型付きの値のみを受け入れるようにします)。

upgrade-insecure-requests

安全でない URL (HTTP で提供されているもの) をすべて安全な URL (HTTPS で提供されているもの) に置き換えたかのように扱うようにユーザエージェントに指示します。このディレクティブは、書き換えが必要な安全でない古い URL が大量にあるウェブサイトを対象としています。

非推奨のディレクティブ

block-all-mixed-content

ページが HTTPS を使用して読み込まれた際に、 HTTP を使用して資産を読み込むことを防止します。

plugin-types

読み込まれるリソースの種類を限定することで、文書に埋め込まれるプラグインの組を制限します。

referrer

ページから離れる際の Referer (綴り注意) ヘッダー内の情報を指定するために使用されていました。代わりに Referrer-Policy ヘッダーを使用してください。

キーワード値

none

すべてのリソースの読み込みを許可しません。

self

現在のオリジンからのみリソースの読み込みを許可します。

strict-dynamic

TBD

report-sample

TBD

unsafe キーワード値

unsafe-inline

インラインリソースの使用を許可します。

unsafe-eval

evalsetImmediate (en-US) window.execScript のような動的コード評価の使用を許可します。

unsafe-hashes

TBD

unsafe-allow-redirects

TBD

ホスト値

Host

指定されたホストからのリソースの読み込みのみを許可します。オプションでスキーム、ポート番号、パスを指定することができます。例: example.com, *.example.com, https://*.example.com:12/path/to/file.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' が強制されます。

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 ヘッダーの使用

Content-Security-Policy: default-src https:

HTML の meta 要素の使用

<meta http-equiv="Content-Security-Policy" content="default-src https:">

例: 修正のためにインラインコードを多用している既存のサイトで、https 経由でのみ読み込まれるリソースを明確にし、プラグインを無効にします。

Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'

例: 上記のポリシーを実装せず、代わりに、発生するであろう違反を報告します。

Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/

その他の例は、Mozilla Web Security Guidelines を参照して下さい。

仕様書

Specification
Content Security Policy Level 3 (Content Security Policy 3)
# csp-header

ブラウザーの互換性

BCD tables only load in the browser

関連情報