-
Notifications
You must be signed in to change notification settings - Fork 4
/
475.txt
286 lines (209 loc) · 14.2 KB
/
475.txt
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
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
[67] [[CSP指令]] [DFN[[CODE(HTTP)@en[[[upgrade-insecure-requests]]]]]]
は、そのページに関する [[fetch]] で [CODE(URI)@en[[[http:]]]] を
[CODE(URI)@en[[[https:]]]] に書き換えることを指示するものです。
[68] [[HTTP要求]]の [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
[[ヘッダー]]は、[[クライアント]]が本 [[CSP指令]]に対応していることを示すものです。
* 仕様書
[REFS[
- [23] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/>
-- [22] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#key-concepts>
-- [26] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#insecure-requests-policy>
-- [31] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#upgrade-insecure-requests>
-- [42] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#preference>
-- [65] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-10-07 03:24:10 +09:00]] 版) <https://w3c.github.io/webappsec-upgrade-insecure-requests/#should-upgrade-for-client>
]REFS]
* 用語
[25] 本[[仕様書]]では次の用語が定義されています。
[FIG(short list)[
- [[格上げ]]
- [[安全に格上げ可能な要求]]
- [[HSTS安全起源]]
- [[条件付きHSTS安全起源]]
- [[preloadable HSTS host]]
]FIG]
* プロトコル
[59] 本[[仕様書]]では次の[[プロトコル要素]]が定義されています。
[FIG(list)[
- [CODE(HTTP)@en[[[upgrade-insecure-requests]]]] ([[CSP指令]])
- [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]] ([[HTTPヘッダー]])
]FIG]
* 格上げ
[24] [[URL scheme]] を [CODE(URI)@en[[[https]]]] や [CODE(URI)@en[[[wss]]]]
に書き換えた時、[[要求]]を[DFN[[RUBYB[[[格上げ]]]@en[upgrade]]]]したといいます [SRC[>>22]]。
[FIG(list short)[
- [[安全に格上げ可能]]
]FIG]
[39] [[格上げ]]は、 [[Mixed Content]] や [[CSP]] の検査よりも前に行われます。
;; [[fetch]] 参照。
* 非保安要求ポリシー
[27] [[環境設定群オブジェクト]]と[[閲覧文脈]]は、
[DFN[[RUBYB[非保安要求ポリシー]@en[insecure requests policy]]]]を持ちます [SRC[>>26]]。
[28] その値は、
「[RUBYB[格上げする]@en[Upgrade]]」、
「[RUBYB[格上げしない]@en[Do Not Upgrade]]」のいずれかです [SRC[>>26]]。
既定値は「格上げしない」です [SRC[>>26]]。
[41] この値は、 [CODE(HTTP)@en[[[Content-Security-Policy:]] [[upgrade-insecure-requests]]]]
で設定されます。
[29] この値は、 [[navigate]] 以外の[[要求]]や[[フォームの提出]]において、
[CODE(URI)@en[[[http:]]]] → [CODE(URI)@en[[[https:]]]]
の書き換えを行うかどうかの判断に使われます。
;; [30] [[navigate]] では[[非保安navigate格上げ集合]]が参照されます。
[61] この値は[[閲覧文脈の作成]]や[[新しい文書オブジェクトの作成]]で設定されることがあります。
すなわち、[[フレーム]]外の[[文書]]の指定は、[[フレーム]]内の[[文書]]にも適用されます。
[62] [[ワーカー]]の作成時には、作成元の値が引き継がれます。
[64] [DFN[[RUBYB[[VAR[クライアント]]について非保安要求を格上げするべきか]@en[Should insecure requests be upgraded for [VAR[client]]?]]]]は、
次のように決まります [SRC[>>65]]。
[FIG(steps)[
= [137] [VAR[クライアント]]が[[有責文書]]を持つなら、
== [138] [VAR[クライアント]]の[[有責文書]]の[[非保安要求ポリシー]]を返します。
= [139] それ以外で、[VAR[クライアント]]が[[有責閲覧文脈]]を持つなら、
== [140] [VAR[クライアント]]の[[有責閲覧文脈]]の[[非保安要求ポリシー]]を返します。
= [141] それ以外なら、
== [142] 「格上げしない」を返します。
]FIG]
;; [66] これは [[main fetch]] や [[WebSocket接続の確立]]で参照されます。
* [CODE(HTTP)@en[Content-Security-Policy: upgrade-insecure-requests]]
[32] [[CSP]] の[[指令]] [DFN[[CODE(HTTP)@en[[[upgrade-insecure-requests]]]]]]
は、[[被保護資源]]の非保安要求を格上げするべきことを示します [SRC[>>31]]。
[33] 値は、空です [SRC[>>31]]。
[34] [CODE(HTTP)@en[[[Content-Security-Policy:]]]] [[ヘッダー]]で使うことができます
[SRC[>>31]]。 [CODE(HTML)@en[[[<meta http-equiv=Content-Security-Policy>]]]]
での利用も禁止されていません。 [CODE(HTTP)@en[[[Content-Security-Policy-Report-Only:]]]]
[[ヘッダー]]でも禁止はされていませんが意味はありません [SRC[>>31]]。
[35] [[enforce]] は、次のようにします [SRC[>>31]]。
[FIG(steps)[
= [36] [[被保護資源]]の[[現職設定群オブジェクト]]の[[非保安要求ポリシー]]を、
「格上げ」に設定します。
= [37] [[被保護資源]]の[[現職設定群オブジェクト]]の[[非保安navigate格上げ集合]]に、
[[被保護資源]]の [[URL]] の[[ホスト]]と[[ポート]]の[[組]]を挿入します。
]FIG]
[38] [[monitor]] は、何もしません [SRC[>>31]]。
[40] [CODE(HTTP)@en[[[upgrade-insecure-requests]]]] と
[CODE(HTTP)@en[[[block-all-mixed-content]]]] を併用するべきではありません [SRC[>>31]]。
両方が適用される場合、前者が優先されます。
* [CODE(HTTP)@en[Upgrade-Insecure-Requests:]] ヘッダー
[43] [DFN[[CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]]]
[[ヘッダー]]は、
[[クライアント]]が[[サーバー]]に対して暗号化されて認証された[[応答]]を望んでいること、
[[CSP]] [CODE(HTTP)@en[[[upgrade-insecure-requests]]]] [[指令]]を処理できることを示すものです
[SRC[>>42]]。
** 構文
[44] この[[ヘッダー]]の値は、 [CODE[[[1]]]] です [SRC[>>42]]。
[CODE(HTTP)@en[[[upgrade-insecure-requests]]]] に対応していることを示します。
[FIG(railroad)[
= [CODE(HTTP)[[[1]]]]
]FIG]
[45] 未対応の時は、この[[ヘッダー]]自体を指定しません。
** 文脈
[49] [[利用者エージェント]]は、 [[a priori insecure URL]] への[[要求]]で
[CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]] [[ヘッダー]]を送信しなければ[['''なりません''']]
[SRC[>>42]]。
[51] [[利用者エージェント]]は、 [[potentially secure URL]] でその[[ホスト]]が
[[preloadable HSTS host]] でなければ、[[要求]]で
[CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]] [[ヘッダー]]を送信しなければ[['''なりません''']]
[SRC[>>42]]。
[53] [[利用者エージェント]]は、 [[potentially secure URL]] でその[[ホスト]]が
[[preloadable HSTS host]] なら、[[要求]]で定期的に
[CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]] [[ヘッダー]]を送信する[['''べきです''']]
[SRC[>>42]]。
[EG[
[54] 例えば、 [CODE(HTTP)@en[[[max-age]]]] で示された期限間近の時だけ送信することもできますし、
少ない割合でのみ送信することもできます。 [SRC[>>42]]
]EG]
;; [56] [[prelodable HSTS host]] は [[HSTS安全]]だとわかっているので[[格下げ]] (>>55)
は不要ですが、 [CODE(HTTP)@en[[[max-age]]]] の[[満期]]前に [[HSTS]] 状態を更新する必要があり、
[[サーバー]]は [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
をその合図として使うことができます。 [SRC[>>42]]
;; [63] [[main fetch]>>126] 参照。
[58] それ以外の場面 ([[応答]]など) での利用は禁止こそされていませんが、意味はありません。
** 処理
[55] [[サーバー]]は、素の [[HTTP]] の[[要求]]で [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
[[ヘッダー]]があれば、[[要求]]された[[資源]]の [[potentially secure representation]]
に[[リダイレクト]]する[['''べきです''']] [SRC[>>42]]。
;; [50] [[サーバー]]は、 [[a priori insecure URL]] への[[要求]]で
[CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
[[ヘッダー]]があれば、 [CODE(HTTP)@en[[[upgrade-insecure-requests]]]]
が必要なページへの [[HTTP]] の[[要求]]を [[HTTPS]] への[[要求]]へと[[格上げ]]できます [SRC[>>42]]。
[57] [[サーバー]]は、[[HTTPS]] の[[要求]]で [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
[[ヘッダー]]があれば、[[要求]]の[[ホスト]]が [[HSTS安全]]か[[条件付きHSTS安全]]の場合、
[[応答]]に [CODE(HTTP)@en[[[Strict-Transport-Security:]]]] [[ヘッダー]]を含める[['''べきです''']]
[SRC[>>42]]。
;; [52] [[サーバー]]は、[[potentially secure URL]] への[[要求]]で
[CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]]
[[ヘッダー]]があれば、 [[HTTPS]] への[[要求]]を [[HTTP]] への[[要求]]へと[[格下げ]]できます
[SRC[>>42]]。
[60] [[サーバー]]は、[[HTTPキャッシュ]]を考慮して
[CODE(HTTP)@en[[[Vary:]]]] [[ヘッダー]]に
[CODE(HTTP)@en[[[Upgrade-Insecure-Requests]]]] を追加する必要があるかもしれません。
* 歴史
- [9] [CITE@en[Upgrade Insecure Requests]] ([TIME[2015-05-17 18:30:14 +09:00]] 版) <https://w3c.github.io/webappsec/specs/upgrade/>
[46] [CODE(HTTP)@en[[[Upgrade-Insecure-Requests:]]]] [[ヘッダー]]は、
当初 [CODE(HTTP)@en[[[Prefer:]]]] [[ヘッダー]]の値として導入することが検討されていましたが、
[[HTTPキャッシュ]]の効率に悪影響を及ぼす虞があるとして、
断念されました [SRC[>>42]]。
[47] 次に [DFN[[CODE(HTTP)@en[[[HTTPS:]]]]]] [[ヘッダー]]とすることが提案され、
実際に [[Chrome]] に実装されましたが、 (驚くべきことに)
[[HTTPS]] か素の [[HTTP]] かの判断に影響を及ぼすサーバーが少なからず見つかったため、
[[ヘッダー名]]が改められました。
;; [48] そんな[[サーバー]]はきっと何か恐ろしい脆弱性があるに違いありませんが...
[1] [CITE@en[UPGRADE: Describe a 'return=secure-representation' preference. · e524850 · w3c/webappsec]]
([TIME[2015-02-14 18:48:13 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/e524850dd6d8862712b18b43b9754ce951960cbf>
[2] [CITE@en[Re: UPGRADE: Feature detection?]]
([[Mike West]] 著, [TIME[2015-02-13 22:11:51 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Feb/0280.html>
[3] [CITE@en[Re: ''''''[''''''upgrade'''''']'''''' return=secure-representation]]
([[Mike West]] 著, [TIME[2015-03-13 17:53:21 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Mar/0086.html>
[4] [CITE@en[UPGRADE: Change to 'Prefer: https', which is (hopefully) not horrible ho... · a0aa404 · w3c/webappsec]]
([TIME[2015-03-14 11:35:17 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/a0aa404a84a0eca2040246fcd805980461d327ae>
[5] [CITE@en[UPGRADE: 'tls' is shorter than 'https'. · 29d07a9 · w3c/webappsec]] ([TIME[2015-03-18 11:43:22 +09:00]] 版) <https://github.com/w3c/webappsec/commit/29d07a99aebebd02f40a2daa9feb8425c36c5c21>
[6] [CITE@en[UPGRADE: Rename the header from `Prefer: tls` to `HTTPS: 1`. · d7d9fc0 · w3c/webappsec]] ([TIME[2015-03-19 15:48:18 +09:00]] 版) <https://github.com/w3c/webappsec/commit/d7d9fc0e16573455cf17d562eaff9667096e6489>
[7] [CITE@en[Integrate with UPGRADE. Fixes https://www.w3.org/Bugs/Public/show_bug.cg... · whatwg/fetch@fd90b5a]]
([TIME[2015-03-31 11:21:22 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/fd90b5afd0ff09284c2a3cd093c577d17ce06898>
[8] [CITE@en[Upgrade Insecure Requests]]
([TIME[2015-04-24 19:13:15 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-upgrade-insecure-requests-20150424/>
[10] [CITE@en[UPGRADE: 'HTTPS' header causing compatibility issues.]]
([[Mike West]] 著, [TIME[2015-06-30 16:36:50 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Jun/0075.html>
[11] [CITE@en[Re: UPGRADE: 'HTTPS' header causing compatibility issues.]]
([[Mike West]] 著, [TIME[2015-07-07 21:10:11 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Jul/0052.html>
[12] [CITE@en[UPGRADE: Rename 'HTTPS: 1' to 'Upgrade-Insecure-Requests: 1'. · w3c/webappsec@eeac392]]
([TIME[2015-07-15 12:32:11 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/eeac3922418bfa6cb254071c74ddd962ee418c80>
[13] [CITE@en[Re: UPGRADE: 'HTTPS' header causing compatibility issues.]]
([[Mike West]] 著, [TIME[2015-07-16 16:49:13 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Jul/0108.html>
[14] [CITE@en[UPGRADE: Ugly first stab at a strawman. · 56a27a2 · w3c/webappsec]]
([TIME[2015-02-05 20:37:40 +09:00]] 版)
<https://github.com/w3c/webappsec/commit/56a27a20bef8a3f8f9cf29fecf49b8163eb85afd>
[15] [CITE@en[Upgrade Insecure Requests]]
( ([TIME[2015-02-24 21:59:42 +09:00]] 版))
<http://www.w3.org/TR/2015/WD-upgrade-insecure-requests-20150226/>
[16] [CITE@en[Upgrade Insecure Requests]]
( ([TIME[2015-02-26 20:26:19 +09:00]] 版))
<https://w3c.github.io/webappsec/specs/upgrade/>
[17] [CITE@en[1139297 – Implement CSP upgrade-insecure-requests directive]]
([TIME[2015-05-28 14:53:47 +09:00]] 版)
<https://bugzilla.mozilla.org/show_bug.cgi?id=1139297>
[FIG(quote)[
[FIGCAPTION[
[18] [CITE@en[776278 – Auto Upgrade Insecure Requests from Secure Context]]
([TIME[2015-10-02 23:09:30 +09:00]] 版)
<https://bugzilla.mozilla.org/show_bug.cgi?id=776278>
]FIGCAPTION]
> HSTS plus upgrade-insecure-requests is the way to go.
]FIG]
[19] [CITE@en[Upgrade Insecure Requests]]
([TIME[2015-10-01 23:35:23 +09:00]] 版)
<https://w3c.github.io/webappsec-upgrade-insecure-requests/>
[21] [CITE@en[w3c/webappsec-upgrade-insecure-requests]]
([TIME[2015-10-06 23:26:51 +09:00]] 版)
<https://github.com/w3c/webappsec-upgrade-insecure-requests>
[20] [CITE@en[Upgrade Insecure Requests]]
( ([TIME[2015-10-07 23:50:14 +09:00]] 版))
<http://www.w3.org/TR/2015/CR-upgrade-insecure-requests-20151008/>