このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Content-Security-Policy (CSP) ヘッダー
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年8月.
* Some parts of this feature may have varying levels of support.
HTTP のContent-Security-Policy レスポンスヘッダーは、ウェブサイト管理者が、あるページにユーザーエージェントが読み込みを許可されたリソースを管理できるようにします。いくつかの例外を除いて、大半のポリシーにはサーバーオリジンとスクリプトエンドポイントの指定を含んでいます。これはクロスサイトスクリプティング攻撃を防ぐのに役立ちます。
コンテンツセキュリティポリシー (CSP) がブラウザーにどのように配信されるか、また、その外観や、用途、展開戦略など、詳細については、ガイドをご覧ください。
| ヘッダー種別 | レスポンスヘッダー |
|---|---|
| 禁止リクエストヘッダー | いいえ |
In this article
構文
Content-Security-Policy: <policy-directive>; <policy-directive>ここで、<policy-directive> は<directive> <value> の形であり、内部に区切り文字はありません。
ディレクティブ
>フェッチディレクティブ
フェッチディレクティブは、特定のリソース種別を読み込むことができる場所を制御します。
child-srcウェブワーカーと、
<frame>や<iframe>のような要素によって読み込まれる入れ子の閲覧コンテキストのための有効なソースを定義します。frame-srcおよびworker-srcの代替となります。connect-srcスクリプトインターフェイスによって読み込まれる URL を制限します。
default-src別のフェッチディレクティブに対する代替として提供します。
他のすべてのフェッチディレクティブの代替となります。
fenced-frame-srcExperimental<fencedframe>要素に読み込む入れ子になった閲覧コンテキストの有効なソースを指定します。font-src@font-faceによって読み込まれるフォントのための有効なソースを指定します。frame-src<frame>や<iframe>のような要素によって読み込まれた入れ子のコンテンツの閲覧のための有効なソースを指定します。img-src画像やファビコンのための有効なソースを定義します。
manifest-srcアプリケーションのマニフェストファイルのための有効なソースを指定します。
media-srcobject-srcprefetch-src非推奨;非標準事前にフェッチされるか描画される有効なソースを指定します。
script-srcJavaScript および WebAssembly のための有効なソースを指定します。
script-src-elemおよびscript-src-attrの代替となります。script-src-elemJavaScript の
<script>要素のための有効なソースを指定します。script-src-attrJavaScript のインラインイベントハンドラーのための有効なソースを指定します。
style-srcスタイルシートのための有効なソースを指定します。
style-src-elemおよびstyle-src-attrの代替となります。style-src-elemスタイルシートの
<style>および<link>要素にrel="stylesheet"がついたもののための有効なソースを指定します。style-src-attr個々の DOM 要素に適用されるインラインスタイルの有効なソースを指定します。
worker-srcWorker、SharedWorker、ServiceWorkerスクリプトのための有効なソースを指定します。
すべてのフェッチディレクティブには、単一の値として'none' を指定することができ、これは特定のリソースタイプを完全にブロックすることを意味します。または、1つ以上のソース表現値として指定することができ、これはそのリソースタイプの有効なソースを意味します。詳細は、フェッチディレクティブの構文を参照してください。
代替
一部のフェッチディレクティブは、他にもっと細かいディレクティブの代替として機能します。これは、もっと細かいディレクティブが指定されていない場合、代替ディレクティブがそのリソースタイプに対してポリシーを提供して使用されるということを意味しています。
default-srcは他のすべてのフェッチディレクティブの代替となります。script-srcはscript-src-attrおよびscript-src-elemの代替となります。style-srcはstyle-src-attrおよびstyle-src-elemの代替となります。child-srcはframe-srcおよびworker-srcの代替となります。
例えば、次のようになります。
img-srcが省略され、default-srcがあった場合、default-srcで定義されたポリシーが画像に適用されます。script-src-elemが省略され、script-srcがあった場合、script-srcで定義されたポリシーが<script>要素に適用されます。script-src-elemとscript-srcがともに省略された場合、default-srcで定義されたポリシーが<script>要素に適用されます。
文書ディレクティブ
文書ディレクティブは、ポリシーが適用される文書またはワーカー環境のプロパティを管理します。
ナビゲーションディレクティブ
ナビゲーションディレクティブは、例えばユーザーが移動する場所やフォームを送信する場所を管理します。
form-action指定のコンテキストからフォームの送信先として使用される URL を制限します。
frame-ancestors
報告ディレクティブ
報告ディレクティブは CSP 違反の報告過程を制御します。Content-Security-Policy-Report-Only ヘッダーも参照してください。
report-toCSP 違反情報を送信するための報告エンドポイントまたはエンドポイントグループを識別するトークンをブラウザーに提供します。トークンが表すエンドポイントは、他にも
Reporting-Endpointsなどの HTTP ヘッダーで指定されている場合があります。警告:このディレクティブは
report-uriを置き換えることを意図しています。report-toに対応したブラウザーでは、report-uriディレクティブは無視されます。ただし、report-toが広く対応されるようになるまでは、次のようにどちらのヘッダーも指定してください(ここで、endpoint_nameは別個に提供されたエンドポイントの名前です)。httpContent-Security-Policy: …; report-uri https://endpoint.example.com; report-to endpoint_name
その他のディレクティブ
require-trusted-types-forDOM XSS インジェクションシンクでTrustedTypes を強制します。
trusted-typesTrusted Types ポリシーのホワイトリストを指定するために使用します (Trusted Types は、アプリケーションが DOM XSS インジェクションシンクをロックダウンして、文字列の代わりにスプーフィング不可能な型付きの値のみを受け入れるようにします)。
upgrade-insecure-requests安全でない URL (HTTP で提供されているもの) をすべて安全な URL (HTTPS で提供されているもの) に置き換えたかのように扱うようにユーザーエージェントに指示します。このディレクティブは、書き換えが必要な安全でない古い URL が大量にあるウェブサイトを対象としています。
非推奨のディレクティブ
block-all-mixed-content非推奨;ページが HTTPS を使用して読み込まれた際に、 HTTP を使用して資産を読み込むことを防止します。
report-uri非推奨;ユーザーエージェントにコンテンツセキュリティポリシーの違反を報告するよう指示します。これは
report-toディレクティブに置き換えられました。
フェッチディレクティブの構文
すべてのフェッチディレクティブは、次のどちらかを指定します。
- 単一の値
'none'は、特定のリソース型を完全にブロックすべきであることを示します。 - 1 つ以上のソース式値は、そのリソース型に対する有効なソースを示します。
各ソース式は下記に列挙するいずれかの形式を取ります。 すべての形式がすべてのフェッチディレクティブに適用できるわけではないことに注意してください。適用できる形式については、各フェッチディレクティブのドキュメントを参照してください。
<host-source> および<scheme-source> 形式は引用符なしで、また、他にもすべて引用符で囲む必要があります。
'nonce-<ノンス値>'
この値は、文字列nonce- にノンス値を続けたものです。ノンス値はBase64 またはURL セーフ Base64 の文字です。
この文字列は、サーバーが HTTP レスポンスごとに生成するランダムな値です。例を示します。
'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8'
サーバーは、同じ値をこの文書から読み込もうとする<script> または<style> のnonce 属性の値として含めることができます。
ブラウザーは CSP ディレクティブの値と要素属性の値を照合し、一致した場合のみリソースを読み込みます。
ディレクティブがノンスとunsafe-inline を持っている場合、ブラウザーはunsafe-inline を無視します。
さらなる使用例の情報については、 CSP ガイドのノンスを参照してください。
'<ハッシュアルゴリズム>-<ハッシュ値>'
この値は、ハッシュアルゴリズムを識別する文字列に- を続け、ハッシュ値を続けたものです。ハッシュ値はBase64 またはURL セーフ Base64 の文字です。
- ハッシュアルゴリズム識別子は、
sha256、sha384、sha512のいずれかでなければなりません。 - ハッシュ値は、
<script>または<style>リソースの base64 エンコードされたハッシュであり、SHA-256、SHA-384、SHA-512 のいずれかのハッシュ関数を使用して計算されます。
例を示します。
'sha256-cd9827ad...'
ブラウザーが文書を受け取ると、<script> および<style> 要素のコンテンツをハッシュ化し、その結果を CSP ディレクティブ内のハッシュと照合し、一致した場合のみリソースを読み込みます。
要素が(例えばsrc 属性を使用して)外部リソースを読み込んだ場合、その要素にはintegrity 属性もなければなりません。
ディレクティブにハッシュとunsafe-inline がある場合、ブラウザーはunsafe-inline を無視します。
より詳しい使用方法については、 CSP ガイドのハッシュの項目を参照してください。
<host-source>
リソースの有効なソースであるホストのURL または IP アドレスです。
スキーム、ポート番号、パスはオプションです。
スキームを省略した場合は、文書のオリジンのスキームが使用されます。
スキームが一致する場合、安全なアップグレードが許可されます。例えば:
http://example.comはhttps://example.comからのリソースも許可します。ws://example.orgはwss://example.orgからのリソースも許可します。
ワイルドカード ('*') は、サブドメイン、ホストアドレス、ポート番号に使用することができ、それぞれすべての有効な値が有効であることを示します。例を示します。
http://*.example.comは、 HTTP または HTTPS で、example.comのどのサブドメインからのリソースも許可します。
/ で終わるパスは、それらが接頭辞である任意のパスと照合します。例を示します。
example.com/api/はexample.com/api/users/newからのリソースを許可します。
/ で終わらないパスは正確に一致します。例を示します。
https://example.com/file.jsはhttps://example.com/file.jsからのリソースを許可しますが、https://example.com/file.js/file2.jsからは許可しません。
<scheme-source>
スキーム (https: など)です。コロンは必須です。
安全なアップグレードが許可されています。
http:は HTTPS を使用して読み込まれたリソースも許可します。ws:は WSS を使用して読み込まれたリソースも許可します。
'self'
指定された型のリソースは、文書と同じオリジンから読み込まれたもののみです。
安全なアップグレードが許可されています。
- この文書が
http://example.comから提供され、 CSP が'self'であれば、https://example.comからのリソースも許可します。 - この文書が
ws://example.orgから提供され、 CSP が'self'であれば、ws://example.orgからのリソースも許可します。
'unsafe-eval'
既定では、 CSP にdefault-src またはscript-src ディレクティブが含まれている場合、引数を JavaScript として評価する JavaScript の機能は無効になります。これには、eval()、setTimeout() のcode 引数、またはFunction() コンストラクターが含まれます。
この保護を解除するには、unsafe-eval キーワードを使用することができます。これにより、 JavaScript で文字列を動的に評価できるようになります。
警告:開発者は'unsafe-eval' を避けるべきです。なぜなら、それは CSP が存在する目的の多くを無意味にするからです。
詳しい使い方の情報は、 CSP ガイドのeval() と同様の API を参照してください。
'wasm-unsafe-eval'
既定では、 CSP にdefault-src またはscript-src ディレクティブが含まれている場合、ページはWebAssembly.compileStreaming() などの関数を使用して WebAssembly をコンパイルすることは許可されません。
この保護を解除するには、wasm-unsafe-eval キーワードを使用することができます。これは、 JavaScript の一般的な評価を可能にしないため、'unsafe-eval' よりもはるかに安全な代替手段です。
'unsafe-inline'
既定では、 CSP にdefault-src またはscript-src ディレクティブが含まれている場合、インライン JavaScript の実行は許可されません。これには以下が含まれます。
- インラインの
<script>タグ - インラインのイベントハンドラー属性
#"/ja/docs/Web/API/HTMLElement/style" title="style">style属性
この保護を解除し、これらのフォームをすべて読み込むことを許可するには、unsafe-inline キーワードを使用することができます。
警告:開発者は'unsafe-inline' を避けるべきです。なぜなら、 CSP を保有する多くの目的を無効にするからです。
詳しい使い方の情報は、 CSP ガイドのインライン JavaScript を参照してください。
'unsafe-hashes'
既定では、 CSP にdefault-src またはscript-src ディレクティブが含まれている場合、onclick やインラインstyle 属性などのインラインイベントハンドラー属性は実行できません。
'unsafe-hashes' 式は、インラインイベントハンドラーやスタイル属性にハッシュ式を使用することをブラウザーに許可します。例えば、 CSP には次のようなディレクティブが含まれているかもしれません。
script-src 'unsafe-hashes' 'sha256-cd9827ad...'ハッシュ値がインラインイベントハンドラー属性値またはstyle 属性値のハッシュと一致する場合、そのコードは実行が許可されます。
メモ:'unsafe-hashes' 値は安全ではありません。
特に、インラインイベントハンドラー属性のコンテンツが、インライン<script> 要素として文書内に注入される攻撃が可能になります。インラインイベントハンドラーが以下であると仮定します。
<button>Transfer all my money</button>攻撃者がこのコードを格納するインライン<script> 要素を注入できる場合、 CSP は自動的に実行を許可します。
しかし、'unsafe-hashes' は'unsafe-inline' よりもはるかに安全です。
'inline-speculation-rules'
既定では、 CSP にdefault-src またはscript-src ディレクティブが含まれている場合、インライン JavaScript の実行は許可されません。'inline-speculation-rules' は、ブラウザーがtype 属性がspeculationrules であるインライン<script> 要素を読み込むことを許可します。
詳しくは投機ルール API を参照してください。
'strict-dynamic'
'strict-dynamic' キーワードは、ノンスまたはハッシュによってスクリプトに付与された信頼を、例えば、Document.createElement() を使用して新しい<script> タグを作成し、Node.appendChild() を使用して文書内のタグを挿入するなど、動的に読み込まれたスクリプトにも拡張します。
このキーワードがディレクティブに存在する場合、次のソース式の値はすべて無視されます。
より詳しい使用に関する情報は、 CSP ガイドのstrict-dynamic キーワードを参照してください。
'report-sample'
この式がスクリプトやスタイルを制御するディレクティブに含まれ、そのディレクティブがブラウザーにインラインスクリプト、インラインスタイル、またはイベントハンドラー属性をブロックさせる場合、ブラウザーが生成する違反レポートには、ブロックされたリソースの最初の 40 文字を含むsample プロパティが含まれます。
ワーカー内の CSP
ワーカーは、一般的に文書 (もしくは親ワーカー) のコンテンツセキュリティポリシーによって管理されません。ワーカーに対してコンテンツセキュリティポリシーを指定するには、ワーカースクリプト自身が要求したリクエストに対してContent-Security-Policy レスポンスヘッダーを設定して下さい。
ワーカースクリプトのオリジンがグローバルで一意の識別子の場合(例えば、URL のスキームが data や blob の場合)は例外です。この場合、ワーカーは文書もしくは作成元のワーカーのコンテンツセキュリティポリシーを継承します。
複数のコンテンツセキュリティポリシー
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/例
>安全ではないインラインコードを無効にし、 HTTPS のリソースのみを許可する
この HTTP ヘッダーは、既定ではリソースの読み込み(画像、フォント、スクリプトなど)を HTTPS 経由のみ許可するように設定します。unsafe-inline およびunsafe-eval ディレクティブが設定されていないため、インラインスクリプトはブロックされます。
Content-Security-Policy: default-src https:HTML の<meta> 要素を使用しても、同じ制限を適用することができます。
<meta http-equiv="Content-Security-Policy" content="default-src https:" />インラインコードと HTTPS リソースを許可するが、プラグインを無効にする
このポリシーは、修正すべきインラインコードを多用する既存のサイトで使用することができ、リソースが確実に HTTPS 経由で読み込まれるようにし、プラグインを無効にすることができます。
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'検査時に違反を報告するが、違反を強制しない
この例では、Content-Security-Policy-Report-Only ヘッダーとreport-to ディレクティブを使用して、前回と同じ制限を設定します。この手法は、検査中に違反を報告するために使用しますが、コードの実行をブロックすることはありません。
レポートを送信するエンドポイント (URL)、 HTTP レスポンスヘッダーのReporting-Endpoints を使用して定義します。
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"CSP ポリシーでは、report-to ディレクティブを使用して、具体的なエンドポイントが報告先として選択されます。
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-url/; report-to csp-endpointreport-uri非推奨; ディレクティブも上記で指定されていることに注意してください。report-to はまだ広くブラウザーが対応していないためです。
その他の例は、Content Security Policy (CSP) の実装 を参照して下さい。
仕様書
| Specification |
|---|
| Content Security Policy Level 3> # csp-header> |