/
179.txt
260 lines (197 loc) · 14.3 KB
/
179.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
[44] [DFN[[CODE(JS)@en[[[document.domain]]]]]] [[IDL属性]]は、
[[実効スクリプト起源]]の[[ホスト名]]部分を表すものです。
[FIG(important)[
[48] [CODE(JS)@en[[[document.domain]]]] はセキュリティーホールを容易に作れてしまい危険です。
ほとんどの場合は、 [CODE(DOMm)@en[[[postMessage]]]] など他の方法を探すべきです。
]FIG]
* 仕様書
[REFS[
- [17] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#dom-document-domain>
-- [20] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#the-document's-domain>
- [47] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-04-25 04:40:19 +09:00]] 版) <https://html.spec.whatwg.org/#sandboxed-document.domain-browsing-context-flag>
- [69] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-10-14 21:54:07 +09:00]] 版) <https://html.spec.whatwg.org/#environment-settings-object>
- [73] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-03-23 21:27:20 +09:00]] 版) <https://html.spec.whatwg.org/#origin-2>
]REFS]
* 意味
[22] [CODE(JS)@en[[[document.domain]]]] は、同じ[[ドメイン]]の異なる[[ホスト]]のページが互いの
[[DOM]] のアクセスできるようにするものです [SRC[>>17]]。
[23] [CODE(JS)@en[[[document.domain]]]] を使って[[同一起源ポリシー]]の制約を緩和すると、
[[三項組]]のうち[[ポート]]部分は無視されることになりますから、注意が必要です。
特に同じ[[IPアドレス]]で複数の(異なる[[著者]]の)異なる[[ポート]]の
[[HTTPサーバー]]が動作しているような場合には、[CODE(JS)@en[[[document.domain]]]]
によって通常ならアクセスできない[[起源]]のページから [[DOM]]
にアクセスできてしまうことがあります。 [SRC[>>17]]
[21] [[文書]]は、[F[[DFN[[RUBYB[ドメイン]@en[domain]]]]]]を持ちます [SRC[>>20]]。
* 初期値
[24] [[文書]][VAR[文書]]の[F[[[ドメイン]]]]は、初期状態で次のように設定しなければ[['''なりません''']]
[SRC[>>17]]。
[FIG(steps)[
= [26] [VAR[文書]]の[F[[[閲覧文脈]]]]がない場合、
== [27] [[空]]の[[ドメイン]]に設定します。
= [55] それ以外で、[[[VAR[文書]]の[F[起源]]]]が[[三項組]]の場合、
== [56] [[[VAR[文書]]の[F[起源]]]]の[F[[[ホスト]]]]に設定します。
= [57] それ以外の場合、
== [58] [[空]]の[[ドメイン]]に設定します。
]FIG]
* 取得器
[18] [CODE(JS)@en[[[document.domain]]]] [[IDL属性]]の[[取得器]]は、
[[文脈オブジェクト]]の[F[[[ドメイン]]]]に[[ホスト直列化器]]を適用して得た
[CODE(DOMi)@en[[[DOMString]]]] を返さなければ[['''なりません''']] [SRC[>>17]]。
* 設定器
[19] [CODE(JS)@en[[[document.domain]]]] [[IDL属性]]の[[設定器]]は、
次のようにしなければ[['''なりません''']] [SRC[>>17]]。
[FIG(steps)[
= [59] [VAR[指定値]]を、新しい値として指定されたものを [CODE(DOMi)@en[[[DOMString]]]]
と解釈した結果に設定します。
= [28]
[FIG(list)[
- [29] [[文脈オブジェクト]]の[F[[[閲覧文脈]]]]が無い場合
- [30] [[文脈オブジェクト]]の[F[[[活性砂箱化フラグ集合]]]]の
[F[[DFN[[RUBYB[[[砂箱化[CODE(JS)@en[document.domain]]閲覧文脈フラグ]]]@en[[[sandboxed [CODE(JS)@en[document.domain]] browsing context flag]]]]]]]] [SRC[>>47]]
が設定されている場合
- [60] [VAR[指定値]]が[[空文字列]]の場合
]FIG]
... のいずれかを満たす場合には、 [CODE(DOMe)@en[[[SecurityError]]]]
[[例外]]を[[投げ]]て停止します。
= [61] [VAR[ホスト]]を、[VAR[指定値]]に[[ホスト構文解析器]]を適用した結果に設定します。
= [34] [VAR[ホスト]]が失敗なら、
[CODE(DOMe)@en[[[SecurityError]]]] [[例外]]を[[投げ]]て停止します。
= [35] [VAR[ホスト]]と[[文脈オブジェクト]]の[F[[[ドメイン]]]]が[[ホスト等価]]でなければ、
== [31] [VAR[ホスト]]が[[ドメイン]]でないか、
[[文脈オブジェクト]]の[F[[[ドメイン]]]]が[[ドメイン]]でないなら、
=== [65] [CODE(DOMe)@en[[[SecurityError]]]] [[例外]]を[[投げ]]て停止します。
== [32] [CODE[[[.]]]] と[VAR[ホスト]]を連結したものが[[文脈オブジェクト]]の[F[[[ドメイン]]]]の末尾となってい''なければ''、
=== [63] [CODE(DOMe)@en[[[SecurityError]]]] [[例外]]を[[投げ]]て停止します。
== [33] [VAR[ホスト]]が [[PSL]] に含まれるか、
[CODE[[[.]]]] と[VAR[ホスト]]を連結したものが [[PSL]] のいずれかの末尾となっていれば、
=== [64] [CODE(DOMe)@en[[[SecurityError]]]] [[例外]]を[[投げ]]て停止します。
==- [38] なお、比較の際には [[PSL]] 側にも[[ホスト構文解析器]]を適用します。
= [39] [[文脈オブジェクト]]の[F[[[ドメイン]]]]を、[VAR[ホスト]]に設定します。
= [62] [[文脈オブジェクト]]の[F[[[実効スクリプト起源]]]]を新しい[[三項組]]に設定します。
[FIG(list members)[
: [F[[[scheme]]]] : [[文脈オブジェクト]]の[F[[[実効スクリプト起源]]]]の [F[[[scheme]]]]
: [F[[[ホスト]]]] : [VAR[ホスト]]
: [F[[[ポート]]]] : 「手動上書き」
]FIG]
]FIG]
;; [36] [[IPアドレス]]を指定できるのは[[IPアドレス]]の[[文書]]だけですし、
[[IPアドレス]]の[[文書]]で指定できるのは[[IPアドレス]]だけで、
しかも同じ[[IPアドレス]]しか指定できません。そうでなければ
[CODE(DOMe)@en[[[SecurityError]]]] になります。
;; [37] >>32 の制限より、 [CODE(JS)@en[[[document.domain]]]] を何度も新しい値に変えていく場合は、
どんどん短くしていかなければなりません。 (そしていつか変えれなくなります。)
[40] [[実効スクリプト起源]]とされる[[起源]]オブジェクトは、
複数の[[文書]]の[F[実効スクリプト起源]]として共有されていることがあります。
[CODE(JS)@en[document.domain]] が変更されると、その変更は同じ[[起源]]オブジェクトを共有する他の[[文書]]にも当然に伝播します。
* 手動上書き
[41] ここで「[DFN[[RUBYB[手動上書き]@en[manual override]]]]」
は、[[起源の比較]]において「手動上書き」と同じで、
それ以外のどの値とも同じでないような値です [SRC[>>17]]。
;; [42] ですから、 [CODE(JS)@en[document.domain = document.domain]] と同じ値を設定すると、
元の[[実効スクリプト起源]]とは異なる[[起源]]になりますから、元の[[実効スクリプト起源]]の別の[[文書]]にはアクセスできなくなります。
;; [43] 「手動上書き」値は[[直列化]]できませんが、
[[実効スクリプト起源]]が[[直列化]]されることは無いはずなので、問題ありません。
* 実効スクリプト起源
[45] [[実効スクリプト起源]]は、 [CODE(JS)@en[[[document.domain]]]]
に相当する仕様書上の概念です。
多くの場合は[[起源]]と同じ値ですが、 [CODE(JS)@en[[[document.domain]]]]
によって異なる値に設定されることがあります。
[71] [[スクリプト]]を介した色々な操作のアクセス制御が[[同一起源ポリシー]]によって行われます。
その時、
[[環境設定群オブジェクト]]の[DFN[[F[実効スクリプト起源]]]] [SRC[>>69]]
が参照されることがあります。
[HISTORY[
[70] これらは以前は「[[スクリプト]]の[[実効スクリプト起源]]」などと呼ばれていたこともありました。
;; [[環境設定群オブジェクト]]の歴史の項も参照。
]HISTORY]
[72] [[環境設定群オブジェクト]]の[F[実効スクリプト起源]]は、
その作成時に決まります。その後も [CODE(JS)@en[document.domain]] の変更の影響を受けます。
;; [[環境設定群オブジェクト]]参照。
[74] [[文書]]は[DFN[[F[実効スクリプト起源]]]]を持ちます [SRC[>>73]]。
[75] その値は、作成時に決まります。多くの場合は[[文書の[F[起源]]]]と同じです。
作成方法によっては、作成元の[F[実効スクリプト起源]]の値を引き継ぎます。
その後も [CODE(JS)@en[document.domain]] の変更の影響を受けます。
;; [CODE(DOMi)@en[Document]] の作成の項、[[navigate]] の項も参照。
* 関連
[46] [[関連類似起源閲覧文脈の単位]]は、 [CODE(JS)@en[[[document.domain]]]]
の用法を考慮した[[閲覧文脈]]群の単位です。
* 歴史
;; [76] [[起源]]の歴史の項も参照。
[REFS[
- [5] [CITE[Origin feedback]] ([[Ian Hickson <ian@...>]] 著, [TIME[2008-04-29 03:08:06 +09:00]] 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/13912>
- [2] [CITE['''['''whatwg''']''' Communicating between different-origin frames]]
([TIME[2010-08-11 09:23:43 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-August/027839.html>
- [3] [CITE[Document Structure – SVG 1.1 (Second Edition)]]
( ([TIME[2011-08-10 12:35:27 +09:00]] 版))
<http://www.w3.org/TR/2011/REC-SVG11-20110816/struct.html#__svg__SVGDocument__domain>
- [4] [CITE@en[Web Applications 1.0 r6789 Go back to ignoring document.domain changes for the purposes of canvas tainting.]]
( ([TIME[2011-10-31 03:11:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6788&to=6789>
]REFS]
[1]
[CITE[Abe Fettig’s Weblog » How to make XmlHttpRequest calls to another server in your domain]] <http://fettig.net/weblog/2005/11/28/how-to-make-xmlhttprequest-connections-to-another-server-in-your-domain/>
[6] [CITE@en[IE8 Security Part VI: Beta 2 Update - IEBlog - Site Home - MSDN Blogs]]
( ([TIME[2012-11-18 01:18:13 +09:00]] 版))
<http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx>
[7] [CITE[Document Object Model for MathML]]
( ([TIME[2001-02-20 21:36:10 +09:00]] 版))
<http://www.w3.org/TR/2001/REC-MathML2-20010221/appendixd.html#dom_Document>
[8] [CITE[Document Object Model for MathML]]
( ([TIME[2002-05-23 15:35:03 +09:00]] 版))
<http://www.w3.org/Math/DOM/mathml2/appendixd.html#dom_Document>
[9] [CITE[IRC logs: freenode / #whatwg / 20130110]]
( ([TIME[2013-01-13 18:26:04 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130110>
[10] [CITE@en[Web Applications 1.0 r8275 Make sandboxed iframes block document.domain setting]]
( ([TIME[2013-11-14 04:32:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8274&to=8275>
[11] [CITE[IRC logs: freenode / #whatwg / 20140311]]
( ([TIME[2014-03-12 21:02:53 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140311#l-447>
[12] [CITE@en[Web Applications 1.0 r8262 Move the spec from a stack of incumbent scripts to a stack of script settings object. This should in theory have no concrete effects (though I may have changed some of the origin used for Web Workers started from document.domain-affected scripts that were called from other scripts with different original origins).]]
( ([TIME[2013-11-09 08:21:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8261&to=8262>
[13] [CITE[IRC logs: freenode / #whatwg / 20141018]]
( ([TIME[2014-10-19 02:05:35 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20141018>
[14] [CITE@en[340494 – access document.domain at about:plugins produces NS_ERROR_FAILURE. No error at about:config]]
( ([TIME[2014-12-10 21:37:26 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=340494>
[FIG(quote)[
[FIGCAPTION[
[15] [CITE@ja[ブラウザ JavaScript]]
([TIME[2015-03-14 20:56:03 +09:00]] 版)
<http://www.opera.com/docs/browserjs/>
]FIGCAPTION]
>
> 最後の TLD には document.domain はセットできない
]FIG]
[16] [CITE[Part2 - browsersec - Browser Security Handbook, part 2 - Browser Security Handbook - Google Project Hosting]]
([TIME[2015-03-31 16:28:13 +09:00]] 版)
<https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_DOM_access>
[49] [CITE@en[Re: CSP policy to constrain cookies to origin]]
([[Mike West]] 著, [TIME[2015-08-28 14:02:18 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Aug/0127.html>
[50] [CITE@en[Allow user agents to consider usage of `document.domain` non-secure. · w3c/webappsec-secure-contexts@1bd4ef2]]
([TIME[2015-12-12 10:46:00 +09:00]] 版)
<https://github.com/w3c/webappsec-secure-contexts/commit/1bd4ef2ce9acb0c4ddca283415501b42b2a768ca>
[51] [CITE@en[Remove the storage mutex due to lack of implementation · whatwg/html@1b918cf]] ([TIME[2015-12-16 14:38:10 +09:00]] 版) <https://github.com/whatwg/html/commit/1b918cf72fcbba011f83b92ab5d1f483fb1cafa3>
** ホストの定義の明確化
[66] 2016年2月には、[[ホスト]]の解釈が [[URL Standard]] の定義に統一される形で明確化されました。
[52] [CITE@en[Revamp the way document.domain is defined · whatwg/html@2a03759]]
([TIME[2016-02-14 16:25:14 +09:00]] 版)
<https://github.com/whatwg/html/commit/2a03759f2fbf4199d187c046074d574a9ae0e209>
[54] [CITE@en[Fix document.domain for IPv6 addresses to match browser behavior with respect to brackets · Issue #670 · whatwg/html]] ([TIME[2016-02-14 16:29:11 +09:00]] 版) <https://github.com/whatwg/html/issues/670>
>
[25] [[文書のドメイン]]が [[IPv6アドレス]]なら、その前後の [ と ]
は省略した中身の部分だけを初期値としなければ[['''なりません''']] [SRC[>>17]]。
[53] という規定が以前はありましたが、 [[Firefox]] のみそう実装しており、
[[Firefox]] も他のブラウザーに合わせて仕様変更したため [SRC[>>54]]、
2016年2月に仕様からもこの規定は削除されました [SRC[>>52]]。
[67] [CITE@en[Remove the section on document.domain · w3c/webappsec-secure-contexts@40985fc]]
([TIME[2016-03-11 15:40:51 +09:00]] 版)
<https://github.com/w3c/webappsec-secure-contexts/commit/40985fc5a7d81c08cacf86b04a7d041ea683c5f9>
[68] [CITE@en[Remove the origin aliasing concept · whatwg/html@438155d]]
([TIME[2016-03-23 23:28:49 +09:00]] 版)
<https://github.com/whatwg/html/commit/438155d2a2255aa5ea84ae390744d8a8662ebec2>