aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/http/headers/content-security-policy/index.html
blob: cf181765d09e946cc7cd0a4b54d2ea191c8612e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
---
title: Content-Security-Policy
slug: Web/HTTP/Headers/Content-Security-Policy
tags:
  - CSP
  - HTTP
  - Reference
  - Security
  - header
  - セキュリティ
translation_of: Web/HTTP/Headers/Content-Security-Policy
---
<div>{{HTTPSidebar}}</div>

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

<p>より詳細な情報は、 <a href="/ja/docs/Web/HTTP/CSP">Content Security Policy (CSP)</a> の入門記事を参照してください。</p>

<table class="properties">
 <tbody>
  <tr>
   <th scope="row">ヘッダー種別</th>
   <td>{{Glossary("Response header", "レスポンスヘッダー")}}</td>
  </tr>
  <tr>
   <th scope="row">{{Glossary("Forbidden header name", "禁止ヘッダー名")}}</th>
   <td>いいえ</td>
  </tr>
 </tbody>
</table>

<h2 id="Syntax" name="Syntax">構文</h2>

<pre class="syntaxbox notranslate">Content-Security-Policy: &lt;policy-directive&gt;; &lt;policy-directive&gt;
</pre>

<p>ここで、 <code>&lt;policy-directive&gt;</code> は次の要素で構成されます: <code>&lt;directive&gt; &lt;value&gt;</code> 内部の句読点なし。</p>

<h2 id="Directives" name="Directives">ディレクティブ</h2>

<h3 id="Fetch_directives" name="Fetch_directives">{{Glossary("Fetch directive", "フェッチディレクティブ")}}</h3>

<p>フェッチディレクティブは、特定のリソース種別がロードされうる場所を制御します。</p>

<h4 id="List_of_Content_Security_Policy_Fetch_directives" name="List_of_Content_Security_Policy_Fetch_directives">Content Security Policy フェッチディレクティブの一覧</h4>

<dl>
 <dt>{{CSP("child-src")}}</dt>
 <dd><a href="/ja/docs/Web/API/Web_Workers_API">ウェブワーカー</a>と、 {{HTMLElement("frame")}}{{HTMLElement("iframe")}} のような要素によってロードされる入れ子状の閲覧コンテキストに対する有効なソースを定義します。
 <div class="warning">
 <p>複合した閲覧コンテキストやワーカーを制御するには、 それぞれ {{CSP("frame-src")}} および {{CSP("worker-src")}}<strong><code>child-src</code></strong> の代わりに使用してください。</p>
 </div>
 </dd>
 <dt>{{CSP("connect-src")}}</dt>
 <dd>script インターフェースによってロードされる URL を制限します。</dd>
 <dt>{{CSP("default-src")}}</dt>
 <dd>別の {{Glossary("Fetch directive", "Fetch ディレクティブ")}}に対する代替として提供します。</dd>
 <dt>{{CSP("font-src")}}</dt>
 <dd>{{cssxref("@font-face")}} によってロードされるフォントに対する有効なソースを指定します。</dd>
 <dt>{{CSP("frame-src")}}</dt>
 <dd>{{HTMLElement("frame")}}{{HTMLElement("iframe")}} のような要素によってロードされる入れ子状のコンテンツの閲覧に対する有効なソースを指定します。</dd>
 <dt>{{CSP("img-src")}}</dt>
 <dd>画像や favicon に対する有効なソースを定義します。</dd>
 <dt>{{CSP("manifest-src")}}</dt>
 <dd>アプリケーションのマニフェストファイルに対する有効なソースを指定します。</dd>
 <dt>{{CSP("media-src")}}</dt>
 <dd>{{HTMLElement("audio")}}{{HTMLElement("video")}}{{HTMLElement("track")}} 要素によってロードするメディアに対する有効なソースを指定します。</dd>
 <dt>{{CSP("object-src")}}</dt>
 <dd>{{HTMLElement("object")}}{{HTMLElement("embed")}}{{HTMLElement("applet")}} 要素に対する有効なソースを指定します。</dd>
 <dd class="note"><code>object-src</code> で制御される要素は、おそらく古い HTML 要素に該当すると見なされ、新しい標準機能が利用できません (セキュリティ属性の <code>sandbox</code><code>&lt;iframe&gt;</code><code>allow</code> など)。従って、このフェッチディレクティブで制限を掛けることが<strong>推奨されます</strong> (例えば、可能であれば <code>object-src 'none'</code> を設定するなど)。</dd>
 <dt>{{CSP("prefetch-src")}}{{experimental_inline}}</dt>
 <dd>事前にフェッチされるか描画される有効なソースを指定します。</dd>
 <dt>{{CSP("script-src")}}</dt>
 <dd>JavaScript に対する有効なソースを指定します。</dd>
 <dt>{{CSP("script-src-elem")}}{{experimental_inline}}</dt>
 <dd>JavaScript の {{HTMLElement("script")}} 要素に対する有効なソースを指定します。</dd>
 <dt>{{CSP("script-src-attr")}}{{experimental_inline}}</dt>
 <dd>JavaScript のインラインイベントハンドラーに対する有効なソースを指定します。</dd>
</dl>

<dl>
 <dt>{{CSP("style-src")}}</dt>
 <dd>スタイルシートに対する有効なソースを指定します。</dd>
 <dt>{{CSP("style-src-elem")}}{{experimental_inline}}</dt>
 <dd>スタイルシートの {{HTMLElement("style")}} および {{HTMLElement("link")}} 要素に <code>rel="stylesheet"</code> がついたもののに対する有効なソースを指定します。</dd>
 <dt>{{CSP("style-src-attr")}}{{experimental_inline}}</dt>
 <dd>個々の DOM 要素に適用されるインラインスタイルの有効なソースを指定します。</dd>
 <dt>{{CSP("worker-src")}}{{experimental_inline}}</dt>
 <dd>{{domxref("Worker")}}, {{domxref("SharedWorker")}}, {{domxref("ServiceWorker")}} スクリプトに対する有効なソースを指定します。</dd>
</dl>

<h3 id="Document_directives" name="Document_directives">{{Glossary("Document directive", "文書ディレクティブ")}}</h3>

<p>文書ディレクティブは、ポリシーが適用される文書もしくは <a href="/ja/docs/Web/API/Web_Workers_API">Worker</a> 環境のプロパティを管理します。</p>

<h4 id="List_of_Content_Security_Policy_Document_directives" name="List_of_Content_Security_Policy_Document_directives">Content Security Policy 文書ディレクティブの一覧</h4>

<dl>
 <dt>{{CSP("base-uri")}}</dt>
 <dd>文書の {{HTMLElement("base")}} 要素で使用される URL を制限します。</dd>
 <dt>{{CSP("plugin-types")}}</dt>
 <dd>ロードされるリソースのタイプを限定することで、文書に埋め込まれるプラグインの組を制限します。</dd>
 <dt>{{CSP("sandbox")}}</dt>
 <dd>{{HTMLElement("iframe")}}{{htmlattrxref("sandbox", "iframe")}} 属性に類似した要求リソースに対してサンドボックスを有効にします。</dd>
</dl>

<h3 id="Navigation_directives" name="Navigation_directives">{{Glossary("Navigation directive", "ナビゲーションディレクティブ")}}</h3>

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

<h4 id="List_of_Content_Security_Policy_Navigation_directives" name="List_of_Content_Security_Policy_Navigation_directives">Content Security Policy ナビゲーションディレクティブの一覧</h4>

<dl>
 <dt>{{CSP("form-action")}}</dt>
 <dd>指定のコンテキストからフォームの送信先として使用される URL を制限します。</dd>
 <dt>{{CSP("frame-ancestors")}}</dt>
 <dd>{{HTMLElement("frame")}}, {{HTMLElement("iframe")}}, {{HTMLElement("object")}}, {{HTMLElement("embed")}}, もしくは {{HTMLElement("applet")}} によってページに埋め込まれた有効な親を指定します。</dd>
 <dt>{{CSP("navigate-to")}}{{experimental_inline}}</dt>
 <dd>{{HTMLElement("form")}} ({{CSP("form-action")}} が指定されていない場合), {{HTMLElement("a")}}, {{DOMxRef("window.location")}}, {{DOMxRef("window.open")}}, など、あらゆる方法で文書からナビゲーションを行うことができる URL を制限します。</dd>
</dl>

<h3 id="Reporting_directives" name="Reporting_directives">{{Glossary("Reporting directive", "報告ディレクティブ")}}</h3>

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

<h4 id="List_of_Content_Security_Policy_Reporting_directives" name="List_of_Content_Security_Policy_Reporting_directives">Content Security Policy 報告ディレクティブの一覧</h4>

<dl>
 <dt>{{CSP("report-uri")}}{{deprecated_inline}}</dt>
 <dd>ユーザーエージェントにコンテンツセキュリティポリシーの違反を報告するよう指示します。これらの違反の報告は、 {{Glossary("JSON")}} 文書を HTTP の <code>POST</code> リクエストで指定された URI に送信することで行われます。
 <div class="warning">
 <p>{{CSP("report-to")}} ディレクティブは非推奨の <code><strong>report-uri</strong></code> ディレクティブを置き換えることを意図していますが、 {{CSP("report-to")}} はまだ多くのブラウザーで対応されていません。そのため、ブラウザーで {{CSP("report-to")}} の対応が行われるまでは現在のブラウザーとの互換性のため、 <code><strong>report-uri</strong></code> および {{CSP("report-to")}} の両方を指定することができます。</p>

 <pre class="syntaxbox notranslate">Content-Security-Policy: ...; report-uri https://endpoint.example.com; report-to groupname</pre>

 <p>{{CSP("report-to")}} に対応したブラウザーでは、 <code><strong>report-uri</strong></code> ディレクティブは無視されます。</p>
 </div>
 </dd>
 <dt>{{CSP("report-to")}}{{experimental_inline}}</dt>
 <dd><code>SecurityPolicyViolationEvent</code> を発生させます。</dd>
</dl>

<h3 id="Other_directives" name="Other_directives">その他のディレクティブ</h3>

<dl>
 <dt>{{CSP("block-all-mixed-content")}}</dt>
 <dd>ページが HTTPS を使用して読み込まれた際に、 HTTP を使用して資産を読み込むことを防止します。</dd>
 <dt>{{CSP("referrer")}}{{deprecated_inline}}{{non-standard_inline}}</dt>
 <dd>ページから離れる際の Referer ヘッダー内の情報を指定するために使用されていました。代わりに {{HTTPHeader("Referrer-Policy")}} ヘッダーを使用してください。</dd>
 <dt>{{CSP("require-sri-for")}}{{experimental_inline}}</dt>
 <dd>ページ上のスクリプトやスタイルに {{Glossary("SRI")}} の使用を要求します。</dd>
 <dt>{{CSP("require-trusted-types-for")}}{{experimental_inline}}</dt>
 <dd>DOM XSS インジェクションシンクで <a href="https://w3c.github.io/webappsec-trusted-types/dist/spec/">Trusted Types</a> を強制します。</dd>
</dl>

<dl>
 <dt>{{CSP("trusted-types")}}{{experimental_inline}}</dt>
 <dd><a href="https://w3c.github.io/webappsec-trusted-types/dist/spec/">Trusted Types</a> ポリシーのホワイトリストを指定するために使用します (Trusted Types は、アプリケーションが DOM XSS インジェクションシンクをロックダウンして、文字列の代わりにスプーフィング不可能な型付きの値のみを受け入れるようにします)。</dd>
</dl>

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

<h2 id="CSP_in_workers" name="CSP_in_workers">Worker 内の CSP</h2>

<p><a href="/ja/docs/Web/API/Worker">Worker</a> は、一般的に文書 (もしくは親 Worker) の Content Security Policy によって管理されません。Worker に対する Content Security Policy を指定するには、Worker スクリプト自身が要求したリクエストに対して <code>Content-Security-Policy</code> レスポンスヘッダーを設定して下さい。</p>

<p>Worker スクリプトのオリジンがグローバルで一意の識別子の場合、(例えば、URL がデータやブロブのスキーマの場合)、例外に当たります。この場合、Worker は文書もしくは作成元の Worker の Content Security Policy を継承します。</p>

<h2 id="Multiple_content_security_policies" name="Multiple_content_security_policies">複数の CSP</h2>

<p>CSP では、<code>Content-Security-Policy</code> ヘッダー、{{HTTPHeader("Content-Security-Policy-Report-Only")}} ヘッダーや {{HTMLElement("meta")}} 要素を経由したものを含む、リソースに対して複数のポリシーを指定することができます。</p>

<p>以下の例のように、 <code>Content-Security-Policy</code> ヘッダーを複数回使うことができます。ここでは {{CSP("connect-src")}} ディレクティブに特に注意してください。2つ目のポリシーでは接続を許可しているにもかかわらず、1つ目のポリシーには <code>connect-src 'none'</code> が含まれています。追加のポリシーを追加すると、保護されたリソースの機能が<em>さらに制限することができる</em>だけで、接続は許可されず、最も厳密なポリシーとして <code>connect-src 'none'</code> が強制されます。</p>

<pre class="notranslate">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/</pre>

<h2 id="Examples" name="Examples"></h2>

<p>例: 安全でない inline/eval を無効にし、https 経由でのリソース (画像、フォント、スクリプトなど) のロードを許します。</p>

<pre class="notranslate">// ヘッダー
Content-Security-Policy: default-src https:

// メタタグ
&lt;meta http-equiv="Content-Security-Policy" content="default-src https:"&gt;
</pre>

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

<pre class="notranslate">Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'</pre>

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

<pre class="notranslate">Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/</pre>

<p>その他の例は、 <a href="https://infosec.mozilla.org/guidelines/web_security#Examples_5">Mozilla Web Security Guidelines</a> を参照して下さい。</p>

<h2 id="Specifications" name="Specifications">仕様書</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">仕様書</th>
   <th scope="col">状態</th>
   <th scope="col">備考</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{specName("CSP 3.0")}}</td>
   <td>{{Spec2("CSP 3.0")}}</td>
   <td><code>manifest-src</code>, <code>navigate-to</code>, <code>report-to</code>, <code>strict-dynamic</code>, <code>worker-src</code> を追加。 <code>frame-src</code> の非推奨を解除。 <code>report-uri</code><code>report-to</code> の代わりに非推奨化。</td>
  </tr>
  <tr>
   <td>{{specName("Mixed Content")}}</td>
   <td>{{Spec2("Mixed Content")}}</td>
   <td><code>block-all-mixed-content</code> を追加。</td>
  </tr>
  <tr>
   <td>{{specName("Subresource Integrity")}}</td>
   <td>{{Spec2("Subresource Integrity")}}</td>
   <td><code>require-sri-for</code> を追加。</td>
  </tr>
  <tr>
   <td>{{specName("Upgrade Insecure Requests")}}</td>
   <td>{{Spec2("Upgrade Insecure Requests")}}</td>
   <td><code>upgrade-insecure-requests</code> を追加。</td>
  </tr>
  <tr>
   <td>{{specName("CSP 1.1")}}</td>
   <td>{{Spec2("CSP 1.1")}}</td>
   <td><code>base-uri</code>, <code>child-src</code>, <code>form-action</code>, <code>frame-ancestors</code>, <code>plugin-types</code>, <code>referrer</code>, <code>report-uri</code> を追加。 <code>frame-src</code> を非推奨化。</td>
  </tr>
  <tr>
   <td>{{specName("CSP 1.0")}}</td>
   <td>{{Spec2("CSP 1.0")}}</td>
   <td><code>connect-src</code>, <code>default-src</code>, <code>font-src</code>, <code>frame-src</code>, <code>img-src</code>, <code>media-src</code>, <code>object-src</code>, report-uri, <code>sandbox</code>, <code>script-src,</code>, <code>style-src</code> を定義。</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>

<p>{{Compat("http.headers.csp.Content-Security-Policy")}}</p>

<h2 id="See_also" name="See_also">関連情報</h2>

<ul>
 <li>{{HTTPHeader("Content-Security-Policy-Report-Only")}}</li>
 <li><a href="/ja/docs/Web/HTTP/CSP">コンテンツセキュリティポリシーを学ぶ</a></li>
 <li><a href="/ja/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy">WebExtensions のコンテンツセキュリティ</a></li>
 <li><a href="https://csp.withgoogle.com/docs/strict-csp.html">Adopting a strict policy</a></li>
 <li><a href="https://github.com/google/csp-evaluator">CSP Evaluator</a> - コンテンツセキュリティポリシーを評価する</li>
</ul>