CSP のポリシーディレクティブ

web サイトの管理者は、Content Security Policy (CSP) を使用してポリシーの範囲を定義できます。これらは web サイトの要件に応じて任意に組み合わせることができ、以下に挙げられているものすべてを指定する必要はありません。

Content sources

ポリシーを指定するディレクティブのうち大半は、content source を 1 つ以上指定する必要があります。content source とは、読み込むコンテンツの配信元を表す文字列です。

Source lists

source list とは、一つまたは複数のホストを名前や IP アドレスで指定した文字列です。スキーム とポート番号は省略可能です。web サイトのアドレスの先頭にはワイルドカード(アスタリスク文字, '*')を使用することもでき、ワイルドカードはポート番号に使用することもできます。この場合、すべてのポートが content source として妥当であることを示します。また、ホストはスペースで区切られます。

以下はホストの正しい表記方法です。

http://*.example.com
http: スキームを使用した example.com のあらゆるサブドメインに対するアクセスすべてにマッチします。
mail.example.com:443
mail.example.com のポート番号 443 に対するすべてのアクセスにマッチします。
https://store.example.com
https: を使用した store.example.com に対するすべてのアクセスにマッチします。

ポート番号が省略された場合、ブラウザは指定されたスキームにおけるデフォルトのポート番号を使用します。スキームが省略された場合、CSP の保護対象であるドキュメントと同じスキームを使用します。

キーワード

以下のキーワードを用いることで、特別な種類の content sources を指定することができます。

'none'
空集合を指定します(どのホストにもマッチしません)。シングルクォートも必要です。
'self'
保護対象のドキュメントと同じオリジン(スキームとポート番号も同じ)を指定します。シングルクォートも必要です。一部のブラウザは、blobfilesystem を source のディレクティブから明確に除外しています。これらのコンテンツを許可する必要があるサイトは、Data 属性で指定してください。
'unsafe-inline'
インラインの <script> 要素、javascript: URL、インラインのイベントハンドラ、インラインの <style> 要素といった、インラインリソースの使用を許可します。シングルクォートも必要です。
'unsafe-eval'
文字列からコードを生成する eval() や類似メソッドの使用を許可します。シングルクォートも必要です。
注記: 'unsafe-inline' および 'unsafe-eval' はどちらも安全ではないため、クロスサイトスクリプティングの脆弱性が発生する危険があります。

例えば、ドキュメントのオリジンと trustedscripts.example.com からコンテンツを読み込めるようにしたい場合、次のように指定します。

Content-Security-Policy: default-src 'self' trustedscripts.example.com

Data

注記: data: URI は安全ではないため、スクリプトの source として許可した場合にクロスサイトスクリプティングが発生する危険があります。
data:
content source として data: URI を許可します。これを許可すると、攻撃者によって任意の data: URI を挿入されてしまう可能性があるため、安全ではありません。使用は控え、スクリプト用には決して使用しないでください。
mediastream:
content source として mediastream: URI を許可します。
blob:
content source として blob: URI を許可します。
filesystem:
content source filesystem: URI を許可します。
Content-Security-Policy: default-src 'self'; img-src 'self' data: blob: filesystem:; media-src mediastream:

サポートされているポリシーディレクティブ

以下のポリシーディレクティブを利用することで、様々な範囲に対するポリシーのセキュリティを制御できます。

base-uri

base-uri ディレクティブは、ユーザエージェントがドキュメントのベース URL として使用する URI を定義します。値が省略された場合、どの URI でも許可されます。ディレクティブが省略された場合、ユーザエージェントは base 要素の値を使用します。

base-uri source-list

child-src

child-src ディレクティブは、Web Workers と、<frame><iframe> などの要素で読み込まれる入れ子のブラウジングコンテキストについて許可する source を定義します。frame-src ディレクティブは非推奨となったため、child-src の使用が推奨されています。ポリシーに違反したリクエストが worker に関するものだった場合、ユーザエージェントは fatal network error を返します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
​child-src source-list

connect-src

connect-src ディレクティブは、XMLHttpRequest、WebSocket、EventSource において許可する接続先を定義します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
注記: Firefox 23 以前は connect-src の代わりに xhr-src が使用されており、こちらは XMLHttpRequest の使用だけを制限していました。
connect-src source-list

default-src

default-src ディレクティブは、詳細なディレクティブで指定されなかった種類のコンテンツすべてに対するセキュリティポリシーを定義します。default-src ディレクティブは、以下のディレクティブのフォールバックとして働きます。

  • child-src
  • connect-src
  • font-src
  • img-src
  • manifest-src
  • media-src
  • object-src
  • script-src
  • style-src
default-src source-list

font-src

font-src ディレクティブは、@font-face で読み込まれるフォントについて許可する source を定義します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
font-src source-list

form-action

form-action ディレクティブは、<form> について許可する送信先を定義します。

form-action source-list

frame-ancestors

frame-ancestors ディレクティブは、<frame> および <iframe> 要素を使用した埋め込み先として許可するものを定義します。このディレクティブに関しては、<meta> 要素や Content-Security-policy-Report-Only ヘッダフィールドにおける利用はサポートされていません。

frame-ancestors source-list

frame-src

child-src ディレクティブは、Web Workers と、<frame><iframe> などの要素で読み込まれる入れ子のブラウジングコンテキストについて許可する source を指定します。

注記: このディレクティブは非推奨です。CSP 1.0 しか実装していないブラウザ(Safari 9 など)をサポート対象としない限り、child-src を代わりに使用してください。
frame-src source-list

img-src

img-src ディレクティブは、画像と favicon について許可する source を指定します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
img-src source-list

manifest-src

manifest-src ディレクティブは、リソースに適用できるマニフェストを定義します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
manifest-src source-list

media-src

media-src ディレクティブは、<audio> 要素と <video> 要素で読み込むメディアについて許可する source を定義します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
media-src source-list

object-src

object-src ディレクティブは、<object> 要素、<embed> 要素、<applet> 要素について許可する source を定義します。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
object-src source-list

plugin-types

plugin-types ディレクティブは、ユーザエージェントが起動できるプラグインを定義します。

plugin-types type-list

referrer

referrer ディレクティブは、ページから離れる際に Referer HTTP ヘッダへ記載される情報を定義します。ここに指定できる値は no-refferer / no-referrer-when-downgrade / origin / origin-when-cross-origin / unsafe-url のいずれかです。

​referrer value

reflected-xss

reflected-xss ディレクティブは、反射型クロスサイトスクリプティング攻撃をフィルタリングまたはブロックするヒューリスティック機能について、有効にするかどうかをユーザエージェントに指示するものです。ここに指定できる値は allow / block / filter のいずれかです。<meta> 要素におけるこのディレクティブの利用はサポートされていません。

注記: このディレクティブが meta 要素内に存在した場合は無視されます。
reflected-xss value

report-uri

report-uri ディレクティブは、Content Security Policy に対する違反事象を報告するようにブラウザへ指示するものです。この違反報告は JSON ドキュメントで表現され、HTTP POST リクエストで指定した URI へ送信されます。詳細は CSP 違反報告の使い方 を参照してください。<meta> 要素におけるこのディレクティブの利用はサポートされていません。

report-uri uri

注記: Firefox は現在 report-uri で、Content Security Policy で保護されているコンテンツと同じ URL スキームおよびポートを使用することが必要です。

sandbox

sandbox ディレクティブは、ポップアップブロック、プラグインやスクリプトの実行防止、同一オリジンポリシーの強制などによって、ページの振る舞いを制限します。このディレクティブに関しては、<meta> 要素や Content-Security-policy-Report-Only ヘッダフィールドにおける利用はサポートされていません。

sandbox value

script-src

script-src ディレクティブは、JavaScript について許可する source を指定します。script-src ディレクティブまたは default-src ディレクティブを指定した場合、'unsafe-inline' を指定しなければインラインスクリプトが、'unsafe-eval' を指定しなければ eval() がそれぞれ無効になります。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
script-src source-list

strict-dynamic

strict-dynamic ディレクティブは、script-src で指定された信頼度を、ルートとなるスクリプトから読み込まれたスクリプトにも適用することを宣言するものです。ルートとなるスクリプトは nonce やハッシュ値で指定される必要があります。例えば、ディレクティブを script-src 'strict-dynamic' 'nonce-R4nd0m' のように指定した場合、<script nonce="R4nd0m" src="https://example.com/loader.js">  というルートスクリプトの読み込みを許可し、この loader.js から読み込まれたスクリプトもすべて信頼・許可されます。

script-src 'strict-dynamic' 'nonce-someNonce'

または

script-src 'strict-dynamic' 'sha-hash'

style-src

style-src ディレクティブは、スタイルシートについて許可する source を指定します。ここでは、外部から読み込まれるスタイルシートとインラインで使用される <style> 要素、および HTML の style 属性のすべてが対象です。この source list に含まれていない source によるスタイルシートは、要求も読み込みもできません。style-src ディレクティブまたは default-src ディレクティブが指定された場合、'unsafe-inline' を指定しなければ <style> 要素や style 属性が無効になります。

注記: このディレクティブを省略した場合、ユーザエージェントは default-src ディレクティブを参照します。
style-src source-list

upgrade-insecure-requests

upgrade-insecure-requests ディレクティブは、その Web サイト上における安全でない URL(HTTP で送信される)のすべてを、安全な URL(HTTPS で送信される)に置き換えたように動作するよう、ユーザエージェントに指示するものです。このディレクティブは、 安全でない URL を多く書き換えなければならない web サイトで利用されることを想定しています。

仕様

仕様書 策定状況 備考
Content Security Policy Level 3 勧告改訂案 strict-dynamic の追加
Referrer Policy 草案 referrer ポリシーにおける値の追加
Upgrade Insecure Requests 勧告候補 upgrade-insecure-requests の追加
Content Security Policy Level 2 勧告候補 base-uri, child-src, form-action, frame-ancestors, plugin-types, referrer, reflected-xss, and report-uri を追加。frame-src を非推奨に変更。
Content Security Policy 1.0 勧告候補 connect-src, default-src, font-src, frame-src, img-src, media-src, objects-src, report-uri, sandbox, script-src, style-src を定義。

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Edge Opera Safari
基本サポート 14.0[4]
25.0
45.0[2]
4.0 (2.0)[5]
23.0 (23.0)
未サポート 12 15 6[4]
7
base-uri 40.0 35.0 (35.0) ? ? ? ?
child-src (有) 45.0 (45.0) ? ? ? ?
connect-src (有) 23.0 (23.0) ? ? ? ?
default-src (有) 23.0 (23.0) ? ? ? ?
font-src (有) 23.0 (23.0) ? ? ? ?
form-action 40.0 36.0 (36.0) ? ? ? ?
frame-ancestors 40.0 33.0 (33.0) ? ? ? ?
frame-src (有) ? ? ? ? ?
img-src (有) 23.0 (23.0) ? ? ? ?
manifest-src (有) 41.0 (41.0) ? ? ? ?
media-src (有) 23.0 (23.0) ? ? ? ?
object-src (有) 23.0 (23.0) ? ? ? ?
plugin-types 40.0 未サポート ? ? ? ?
referrer (有)[3] 37.0 (37.0) ? ? ? ?
reflected-xss (有) 未サポート ? ? ? ?
report-uri 40.0 ? ? ? ? ?
sandbox (有) ? 10[5] ? ? ?
script-src (有) 23.0 (23.0) ? ? ? ?
strict-dynamic 52.0 ? ? ? 39 ?
style-src (有) 23.0 (23.0) ? ? ? ?
upgrade-insecure-requests 43.0 42.0 (42.0) 未サポート 未サポート 30 未サポート
Feature Android Browser Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support (有)[1] (有)
45.0[2]
4.0 (2.0) ? ? 7.1 (有)
45.0[2]
base-uri 未サポート 40.0 35.0 (35.0) ? ? ? 40.0
child-src 未サポート 40.0 未サポート ? ? ? 40.0
connect-src ? (有) 未サポート ? ? ? (有)
default-src ? (有) 未サポート ? ? ? (有)
font-src ? (有) 未サポート ? ? ? (有)
form-action 未サポート 40.0 36.0 (36.0) ? ? ? 40.0
frame-ancestors 未サポート 40.0 33.0 (33.0) ? ? ? 40.0
frame-src ? (有) 未サポート ? ? ? (有)
img-src ? (有) 未サポート ? ? ? (有)
manifest-src ? ? 41.0 (41.0) ? ? ? ?
media-src ? (有) 未サポート ? ? ? (有)
object-src ? (有) 未サポート ? ? ? (有)
plugin-types 未サポート 40.0 未サポート ? ? ? 40.0
referrer ?[3] (有) 37.0 (37.0) ? ? ? (有)[3]
reflected-xss ? (有) 未サポート ? ? ? (有)
report-uri 未サポート 40.0 未サポート ? ? ? 40.0
sandbox ? (有) 未サポート ? ? ? (有)
script-src ? (有) 未サポート ? ? ? (有)
strict-dynamic 未サポート 52.0 ? ? 39 ? 52.0
style-src ? (有) 未サポート ? ? ? (有)
upgrade-insecure-requests 42.0 (42) 43.0 未サポート 未サポート 未サポート 未サポート 43.0

 

注記

[1] Android 4.0 から非推奨になりました。

[2] Chrome 45.0 より、blob および filesystem を提供元ディレクティブから除外しています。これらのコンテンツタイプを許可する必要があるサイトでは、データ属性を使用して指定してください。

[3] Chrome 45.0 より、referrer ポリシーの値は Refferer Policy の仕様で定義された値に制限されます。

[4] X-Webkit-CSP ヘッダによる実装。

[5] X-Content-Security-Policy ヘッダによる実装

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: hashedhyphen, hamasaki, yyss, ethertank, Marsf
 最終更新者: hashedhyphen,