/
30.txt
301 lines (216 loc) · 15.7 KB
/
30.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
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
[60] [DFN[[RUBYB[砂箱化]@en[sandboxing]]]]は、
[[スクリプト]]等により可能な操作を制限するものです。
[CODE(HTMLe)@en[[[iframe]]]] [[要素]]の [DFN[[CODE(HTMLa)@en[[[sandbox]]]]]]
[[属性]]は、[[入れ子閲覧文脈]]の[[砂箱化]]を指示するものです。
[[CSP]] の [DFN[[CODE(HTTP)@en[[[sandbox]]]]]] [[指令]]は、
[[資源]]の[[砂箱化]]を指示するものです。
* 仕様書
[REFS[
- [31] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#attr-iframe-sandbox>'''
- [59] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-05-06 10:42:35 +09:00]] 版) <https://html.spec.whatwg.org/#sandboxing>
- [48] [CITE@en[Content Security Policy]] ([TIME[2015-07-16 16:42:52 +09:00]] 版) <https://w3c.github.io/webappsec/specs/content-security-policy/#directive-sandbox>
- [57] [CITE@en[Content Security Policy]] ([TIME[2015-07-16 16:42:52 +09:00]] 版) <https://w3c.github.io/webappsec/specs/content-security-policy/#directive-frame-ancestors>
]REFS]
* 意味
[32] [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]は、 [CODE(HTMLe)@en[[[iframe]]]]
[[要素]]の中の[[内容]]に追加の制限を加えるものです [SRC[>>31]]。
[36] 本[[属性]]が指定されていると、色々な制限が適用されます。
[[属性]]に値を指定することで、その制限の一部を緩和できます。
;; [37] なお、すべての値を指定しても、すべての制限を緩和できるわけではありません
([[属性]]を指定しない状態になるわけではありません)。
[38] 本[[属性]]の指定は、 [[navigate]] 時に適用されます。変更したり削除したりしても、
直ちに適用されるのではなく、次の [[navigate]] より適用されます。
[50] [[CSP]] の [CODE(HTTP)@en[[[sandbox]]]] [[指令]]は、保護対象[[資源]]に適用するべき制限を指定するものです [SRC[>>48]]。
[[CSP]] では[[閲覧文脈]]ではなく、[[閲覧文脈]]内の[[文書]]単位で制限を適用します。
[[最上位閲覧文脈]]でも使うことができます。
* 属性名
[51] [CODE(HTMLe)@en[[[iframe]]]] [[要素]]の[[属性名]] [SRC[>>31]] も、
[[CSP]] の[[指令名]] [SRC[>>48]] も、 [CODE(HTML)@en[[[sandbox]]]] です。
* 属性値
[33] [CODE(HTMLe)@en[[[iframe]]]] [CODE(HTMLa)@en[[[sandbox]]]]
[[属性値]]は、[[unordered set of unique space-separated tokens]] でなければ[['''なりません''']] [SRC[>>31]]。
[52] [[CSP]] [CODE(HTTP)@en[[[sandbox]]]] [[指令]]の値は、
[[空文字列]]か、1つ[[以上]]の[[字句]]を1つ[[以上]]の [[WSP]] で区切った列のいずれかでなければ[['''なりません''']] [SRC[>>48]]。
;; [53] 実質的に [[HTML]] も [[HTTP]] も同じ構文ですが、[[空白]]や[[文字参照]]の扱いはそれぞれの通常の規定に準じています。
[34] 各値は、認められた値のいずれかでなければなりません。
[[ASCII大文字・小文字不区別]]です [SRC[>>31]]。
[49] [[HTML Standard]] では、認められる値がすべて規定されているため、
一般的な構文は規定されていません。 [[CSP]] では、[[HTTP]] の[[字句]]であると構文を規定し
[SRC[>>48]]、 [[HTML]] で認められる値を使うべきだと言及するにとどまっています。
* 砂箱化フラグ
[61] [[砂箱化]]は、仕様書上はいくつかのフラグの集合として表されており、
これを[DFN[[RUBYB[[[砂箱化フラグ集合]]]@en[sandboxing flag set]]]] [SRC[>>57]]
といいます。
[62] [[砂箱化]]の指定がない場合、[[砂箱化フラグ集合]]は空とされ、
[[砂箱化]]はまったく行われません。
[63] [CODE(HTMLa)@en[[[sandbox]]]] [[属性]] [SRC[>>31]] や
[CODE(HTTP)@en[[[sandbox]]]] [[指令]] [SRC[>>48]] などで[[砂箱化]]が指示されている場合、
[DFN[[[parse a sandboxing directive]]]] [SRC[>>31]] 操作により新たな[[砂箱化フラグ集合]]が作られます。
この操作では、明示的に除外することが指定されたフラグを除いたすべての[[砂箱化]]のフラグが設定されます。
;; この操作では、指定された[[キーワード]]や、別途与えられた [[allow fullscreen flag]]
により、[[砂箱化]]のフラグを設定します。詳しくは次表を参照。
[64] [[属性値]] [SRC[>>31]] や[[指令値]] [SRC[>>48]] は、
[[間隔で分割]]しなければ[['''なりません''']]。 その結果[[キーワード]]が含まれていれば、
次表の通り、フラグが設定されません。
;; [65] [[属性値]]の定義より[[ASCII大文字・小文字不区別]]と思われますが、
処理方法の規定では明記されていません。
[35] 次のフラグがあります。
[FIG(table)[
:flag:フラグ
:kwd:フラグを設定しない条件
:flag:[[sandboxed navigation browsing context flag]]
:flag:[[sandboxed top-level navigation browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-top-navigation]]]] [[キーワード]]が指定された時
:flag:[[sandboxed plugins browsing context flag]]
:flag:[[sandboxed seamless iframes flag]]
:flag:[[sandboxed auxiliary navigation browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-popups]]]] [[キーワード]]が指定された時
:flag:[[sandboxed origin browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-same-origin]]]] [[キーワード]]が指定された時
:flag:[[sandboxed forms browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-forms]]]] [[キーワード]]が指定された時
:flag:[[sandboxed pointer lock browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-pointer-lock]]]] [[キーワード]]が指定された時
:flag:[[sandboxed scripts browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-scripts]]]] [[キーワード]]が指定された時
:flag:[[sandboxed automatic features browsing context flag]]
:kwd:[CODE(HTML)@en[[[allow-scripts]]]] [[キーワード]]が指定された時
:flag:[[sandboxed storage area URLs flag]]
:flag:[[sandboxed fullscreen browsing context flag]]
:kwd:[[allow fullscreen flag]] が指定された時
:flag:[[sandboxed [CODE(JS)@en[document.domain]] browsing context flag]]
]FIG]
* 処理
[40] [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]のある [CODE(HTMLe)@en[[[iframe]]]]
[[要素]]の[[入れ子閲覧文脈]]を作成する時には、[[初期[CODE(URI)@en[about:blank]]文書]]の作成前に
[[parse a sandboxing directive]] して[[入れ子閲覧文脈]]の[[[CODE(HTMLe)@en[iframe]] sandboxing flag set]]
を設定しなければ[['''なりません''']] [SRC[>>31]]。
[41] [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]が設定または変更された時には、
[[parse a sandboxing directive]] して[[入れ子閲覧文脈]]の[[[CODE(HTMLe)@en[iframe]] sandboxing flag set]]
を設定しなければ[['''なりません''']] [SRC[>>31]]。
[46] どちらの場合も、 [CODE(HTMLa)@en[[[allowfullscreen]]]] [[属性]]があれば、
[[parse a sandboxing directive]] の入力である [[allow fullscreen flag]] を設定しなければ[['''なりません''']] [SRC[>>31]]。
;; [47] [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]が変化した時は再評価されますが、
[CODE(HTMLa)@en[[[allowfullscreen]]]] [[属性]]が変化しても、それだけでは再評価は行われません。
[42] [CODE(HTMLa)@en[[[sandbox]]]] [[属性]]が削除された時には、
[[[CODE(HTMLe)@en[iframe]] sandboxing flag set]] を空にしなければ[['''なりません''']]
[SRC[>>31]]。
[54] [[CSP]] [CODE(HTTP)@en[[[sandbox]]]] [[指令]]は、 [[monitoring]]
の場合 ([CODE(HTTP)@en[[[Content-Securiry-Policy-Report-Only]]]]) や
[CODE(HTMLe)@en[[[meta]]]] [[要素]]の場合、無視されます [SRC[>>48]]。
[55] それ以外の場合、 [[enforce]] 時に[[指令]]の値を [[parse a sandboxing directive]]
し、結果を保護対象[[資源]]の [[forced sandboxing flag set]] としなければ[['''なりません''']]
[SRC[>>48]]。
;; [[navigate]] から間接的に呼び出されます。
[58] [CODE(HTTP)@en[[[frame-ancestor]]]] [[指令]]の制限対象となる場合には、
[[空文字列]]が指定された場合と同様に [[parse a sandboxing directive]]
し、結果を保護対象[[資源]]の [[forced sandboxing flag set]] としなければ[['''なりません''']]
[SRC[>>57]]。
[56] [[navigate]] ではなく [[run a Worker]] 時に [[enforce]] される場合は、
[CODE(HTTP)@en[[[sandbox]]]] [[指令]]が指定され [CODE(HTTP)@en[[[allow-scripts]]]] が指定されていない時や、
[CODE(HTTP)@en[[[sandbox]]]] [[指令]]が指定され [CODE(HTTP)@en[[[allow-same-origin]]]] が指定されておらず新しい実行文脈が[[同じ起源]]であることを求めている時には、
[[ネットワークエラー]]が返されたものとして扱わなければ[['''なりません''']] [SRC[>>48]]。
* セキュリティー
[39] 危険かもしれないファイルを [CODE(HTMLe)@en[[[iframe]]]] の[[文書]]と同じ[[サーバー]]から提供する[['''べきではありません''']]。
直接アクセスさせられると、 [CODE(HTMLa)@en[[[sandbox]]]] を回避してファイルが処理されてしまうからです。
被害を抑えるため、異なる[[ドメイン]]に分けて提供する[['''べきです''']]。 [SRC[>>31]]
* [CODE(DOMi)@en[HTMLIFrameElement]] インターフェイス [CODE(DOMa)@en[sandbox]] 属性
[43] [CODE(DOMi)@en[[[HTMLIFrameElement]]]] [[インターフェイス]]の
[DFN[[CODE(DOMa)@en[[[sandbox]]]]]] [[IDL属性]]は、
[CODE(HTMLa)@en[[[sandbox]]]] [[内容属性]]を[[反映]]しなければ[['''なりません''']]
[SRC[>>31]]。
[44] [[取得器]]は、 [CODE(DOMi)@en[[[DOMSettableTokenList]]]] として[[反映]]します
[SRC[>>31]]。
[45] [[設定器]]は、 [CODE(DOMa)@en[[[value]]]] [[IDL属性]]に
[CODE(IDL)@en[[[PutForwards]]]] されます [SRC[>>31]]。
* 歴史
[1] [CITE@en[(X)HTML5 Tracking]]
([TIME[2010-01-12 22:36:56 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4576&to=4577>
[2] [CITE@en[(X)HTML5 Tracking]]
([TIME[2010-01-12 22:37:33 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4577&to=4578>
[3] [CITE@en[(X)HTML5 Tracking]]
([TIME[2010-01-12 22:39:10 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4579&to=4580>
[4] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-03-24 22:15:30 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4861&to=4862>
[5] [CITE[IRC logs: freenode / #whatwg / 20100408]]
([TIME[2010-04-20 20:02:50 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100408>
[6] [CITE['''['''whatwg''']''' Please consider dropping the "sandbox" attribute from the <iframe> element]]
([TIME[2010-08-02 22:50:46 +09:00]] 版)
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-August/027491.html>
[7] [CITE[IRC logs: freenode / #whatwg / 20100715]]
([TIME[2010-08-03 08:03:40 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20100715>
[8] [CITE@en[Web Applications 1.0 r5571 Better define how sets of unique space-separated tokens are handled in terms of case-sensitivity.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10781]]
( ([TIME[2010-10-01 08:07:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5570&to=5571>
[9] [CITE[IRC logs: freenode / #whatwg / 20110714]]
( ([TIME[2011-07-23 20:18:18 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110714>
[10] [CITE[IRC logs: freenode / #whatwg / 20111011]]
( ([TIME[2011-10-12 00:08:40 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20111011>
[11] [CITE[''''''[''''''whatwg'''''']'''''' iframe sandbox, <object tag>]]
( ([TIME[2012-01-29 12:17:08 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2012-January/034567.html>
[12] [CITE@en[Web Applications 1.0 r7054 sandbox='allow-popups' feature]]
( ([TIME[2012-04-17 14:02:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7053&to=7054>
[13] [CITE[IRC logs: freenode / #whatwg / 20120411]]
( ([TIME[2012-04-16 21:25:26 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120411>
[14] [CITE[IRC logs: freenode / #whatwg / 20120414]]
( ([TIME[2012-04-21 20:45:41 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120414>
[15] [CITE[''''''[''''''whatwg'''''']'''''' Security Issue- Iframe Sandbox attribute - Clarity of operation]]
( ([TIME[2012-06-30 08:25:56 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036530.html>
[16] [CITE[''''''[''''''whatwg'''''']'''''' iframe sandbox attribute]]
( ([TIME[2012-07-10 09:56:14 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-July/036586.html>
[17] [CITE[''''''[''''''whatwg'''''']'''''' Additional attribute value for iframe sandbox]]
( ([TIME[2012-07-11 01:27:41 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-July/036587.html>
[18] [CITE[''''''[''''''whatwg'''''']'''''' sandboxed documents and cookies]]
( ([TIME[2012-07-11 04:15:29 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-July/036589.html>
[19] [CITE@en[Web Applications 1.0 r7485 Add sandbox=allow-pointer-lock, and some nearby cleanup.]]
( ([TIME[2012-10-26 03:10:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7484&to=7485>
[20] [CITE[''''''[''''''whatwg'''''']'''''' allowfullscreen vs sandbox="allow-fullscreen"]]
( ([TIME[2012-12-05 05:25:40 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-December/038258.html>
[21] [CITE[ChangeProposals/sandbox allow popups - HTML WG Wiki]]
( ([TIME[2013-06-13 12:01:58 +09:00]] 版))
<http://www.w3.org/html/wg/wiki/ChangeProposals/sandbox_allow_popups>
[22] [CITE@en[Web Applications 1.0 r7984 Sandboxing: prevent pages from closing their top-level browsing context (unless they can navigate it, in which case, whatever)]]
( ([TIME[2013-06-18 09:24:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7983&to=7984>
[23] [CITE[''''''[''''''whatwg'''''']'''''' iframe sandbox and top navigation]]
( ([TIME[2013-07-12 00:26:45 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040002.html>
[24] [CITE[''''''[''''''whatwg'''''']'''''' Making cross-origin <iframe seamless=""> (partly) usable]]
( ([TIME[2013-07-18 06:08:37 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-July/040115.html>
[25] [CITE[''''''[''''''whatwg'''''']'''''' iframes, more sandbox]]
( ([TIME[2014-05-01 17:26:14 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2014-May/254199.html>
[26] [CITE[Add a placeholder for filesystem and add the sandboxed storage area URLs... · e6fa889 · whatwg/fetch]]
( ([TIME[2014-08-06 04:06:16 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/e6fa8899423652413287c0cf22cd074ffed12905>
[27] [CITE@en[Web Applications 1.0 r8706 Add a sandboxing flag for use by fetch]]
( ([TIME[2014-08-05 08:38:00 +09:00]] 版))
<http://html5.org/r/8706>
[28] [CITE@en[''''''[''''''whatwg'''''']'''''' Proposal: Two changes to iframe@sandbox]]
([[Mike West]] 著, [TIME[2015-05-11 13:11:12 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-whatwg-archive/2015May/0035.html>
[29] [CITE@en[Iframe sandbox improvments - WHATWG Wiki]]
([TIME[2015-06-23 18:03:36 +09:00]] 版)
<https://wiki.whatwg.org/wiki/Iframe_sandbox_improvments>
[30] [CITE@en[Re: ''''''[''''''whatwg'''''']'''''' Proposal: Two changes to iframe@sandbox]]
([[Mike West]] 著, [TIME[2015-06-23 18:14:17 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-whatwg-archive/2015Jun/0098.html>