/[pub]/suikawiki/sw4data/ids/8/485.txt
Suika

Contents of /suikawiki/sw4data/ids/8/485.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.32 - (hide annotations) (download)
Tue Feb 28 14:14:40 2012 UTC (13 years, 3 months ago) by wakaba
Branch: MAIN
Changes since 1.31: +1 -0 lines
File MIME type: text/plain
updated by (anon)

1 wakaba 1.21 * 起源
2 wakaba 1.2
3 wakaba 1.21 [24] [[Web]] の[[セキュリティー・モデル]]である[RUBYB[[[同一起源方針]]]@en[same-origin policy]]において、
4     [[URL]] の[[ドメイン]]等によって定まる[[資源]]の管理の単位を[DFN[[RUBY[起源]@en[オリジン]@en[origin]]]]といいます。
5    
6 wakaba 1.23 ;; [85] [[同一起源方針]]の項もご覧ください。
7    
8 wakaba 1.21 ** 仕様書
9    
10     [REFS[
11 wakaba 1.31 - [23] '''[CITE@en[RFC 6454 - The Web Origin Concept]] ([TIME[2011-12-12 09:13:37 +09:00]] 版) <http://tools.ietf.org/html/rfc6454>'''
12     - [127] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-02-22 20:11:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#windows>
13 wakaba 1.32 - [131] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-02-22 20:11:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#origins-of-workers>
14 wakaba 1.21 ]REFS]
15    
16 wakaba 1.22 ** 識別
17    
18     [25] [[起源]]は、
19     - [[URL scheme]]、[[host]]、[[port]] の[[3項組]]
20     - 大域的に固有な識別子
21    
22     ... のいずれかによって表されます。
23    
24 wakaba 1.23 [37] 大域的に固有な識別子は、他のすべての[[起源]]と異なる任意の値です。 [SRC[>>23 2.3.]]
25    
26     ;; [38] 通常は大域的に固有な識別子は[[利用者エージェント]]の外に露出することが無いので、
27     特定[[プロセス]]内の連番など任意の方法で決定できます。
28    
29     [39] [[HTTP]] などで[[起源]]をやり取りする必要がある時は、 [[URL]] の構文の[[部分集合]]によって[[直列化]]して表します。
30    
31     [EG[
32     [40] 例えば [CODE(URI)@en[http://www.example.com/foo/bar]] の[[起源]]は
33     ([CODE(URI)[http]], [CODE(URI)[www.example,com]], [CODE(URI)[80]]) の[[3項組]]によって表されます。
34     これを [[HTTP]] の [CODE(HTTP)@en[[[Origin:]]]] 欄に含める時は、
35     [CODE(URI)[http://www.example.com]] と表現します。
36     ]EG]
37    
38 wakaba 1.22 ** URL の起源
39    
40 wakaba 1.28 [26] ある [[RFC 3986]] [[URI]] の[[起源]]は次の手順により求められます [SRC[>>23 4.]]。
41 wakaba 1.22 = [27] [[URL]] が[[階層的]]でない、または[[絶対URL]]でないなら、新しい大域的に固有な識別子を生成し、
42     それを返します。
43     = [28] [VAR[url-scheme]] を、 [[URL]] の [[scheme]] 部分を[[小文字]]化したものとします。
44     = [29] 実装が [VAR[url-scheme]] により表される[[プロトコル]]に対応していないなら、
45     新しい大域的に固有な識別子を生成し、それを返します。
46     = [30] [VAR[url-scheme]] が [CODE(URI)@en[[[file]]]] なら、
47     [[実装定義]]の値を返して[['''構いません''']]。
48     = [32] [VAR[url-host]] を、 [[URL]] の [[host]] 部分を[[小文字]]化したものとします。
49     -- [[小文字]]化には [[RFC 4790]] の [CODE[[[i;ascii-casemap]]]] を使います。
50     -- [[IDNA]] により [[Uラベル]]は既に[[Aラベル]]に変換されているものと仮定しています。
51     = [33] [[URL]] に [[port]] 部分がなければ、
52     == [VAR[url-port]] を、 [VAR[url-scheme]] で表される[[プロトコル]]の[[既定のポート]]とします。
53     = [34] そうでなければ、
54     == [VAR[url-port]] を、 [[URL]] の [[port]] 部分とします。
55     = [35] ([VAR[url-scheme]], [VAR[url-host]], [VAR[url-port]]) の[[3項組]]を返します。
56    
57     ;; [36] 仕様上明記されていませんが、 >>32 や >>34 で [[host]] や [[port]] を[[正準化]]する必要がありそうです。
58    
59 wakaba 1.28 ;; [121] 仕様上厳密には [[RFC 3986]] [[URI]] に対して[[起源]]が定義されており、
60     [[URI]] でない [[URL]] ([[IDN]] を使ったものなど) はまず [[URI]] に変換 (できれば) する必要があります。
61     [[URI]] に変換できない [[URL]] については[[起源]]が定義されていないことになります。
62     もちろん現実の [[Webブラウザー]]においては、定義を自然に拡張した [[URL]]
63     一般について同様に[[起源]]が定義されることになります。
64    
65 wakaba 1.22 *** [CODE(URI)@en[file:]] URL の起源
66    
67     [31] 仕様上 [CODE(URI)@en[[[file:]]]] [[URL]] の[[起源]]は[[実装]]定義となっています。
68     古い[[利用者エージェント]]は [CODE(URI)@en[[[file:]]]] [[URL]] に対して緩い制限しかかけていませんでしたが、
69     [[セキュリティー]]上の問題から最近の[[利用者エージェント]]では細かい単位で[[起源]]を設定していたりします。
70     例えば、[[ディレクトリー]]単位でアクセスを制限したり、[[ファイル]]ごとに完全に別の[[起源]]として扱ったりしています
71     [SRC[>>23 4.]]。
72    
73 wakaba 1.31 ** [CODE(DOMi)@en[Document]] の起源
74    
75     - [128] [CODE(URI)@en[[[about:blank]]]] [CODE(DOMi)@en[[[Document]]]] の[[起源]]はその作成時に次の通り決まります [SRC[>>127]]。
76     -- [129] 新しい[[閲覧文脈]]が[[作成子閲覧文脈]]なら、[[作成子[CODE(DOMi)@en[Document]]]]の[[起源]]が
77     [CODE(URI)@en[[[about:blank]]]] [CODE(DOMi)@en[[[Document]]]] の[[起源]]です。
78     -- [130] そうでないなら、新しい[[閲覧文脈]]が作られた時に割り当てらられた大域的に固有な識別子が
79     [CODE(URI)@en[[[about:blank]]]] [CODE(DOMi)@en[[[Document]]]] の[[起源]]です。
80    
81 wakaba 1.25 ** 比較
82 wakaba 1.23
83     [81] 2つの[[起源]]が「[RUBYB[同じ]@en[same]]」である時、その時に限って[RUBYB[同一]@en[identical]]です。
84     具体的には、
85     - [82] 2つの[[起源]]が共に [[scheme]]/[[host]]/[[port]] の[[3項組]]であるなら、
86     3つがそれぞれ[RUBYB[同一]@en[identical]]であるなら、その場合に限って[RUBYB[同じ]@en[same]]です。
87     - [83] 大域的に固有な識別子は、 [[scheme]]/[[host]]/[[port]] の[[3項組]]と[RUBYB[同じ]@en[same]]であることはありません。
88    
89     ... と定義されています。 [SRC[>>23 5.]]
90    
91 wakaba 1.24 ;; [87] あまり意味がないからか自明だからか仕様上明記されていませんが、[[起源]]が共に大域的に固有な識別子である時も、
92     それが同じ値であるなら、その場合に限って、同じ[[起源]]であるはずです。
93    
94 wakaba 1.23 [84] 2つの[[URL]]は、その[[起源]]が[RUBYB[同じ]@en[same]]なら、[RUBYB[[[同一起源]]]@en[same-origin]]です。
95     [SRC[>>23 5.]]
96    
97     ;; [86] 同じ[[URL]]であるからといって[[起源]]も同じとは限りません。例えば [CODE(URI)@en[[[data:]]]]
98     [[URL]] は毎回新しい大域的に固有な識別子が割り振られるため、違う[[起源]]になります。
99    
100 wakaba 1.25 ** 直列化
101    
102     *** ASCII 直列化
103    
104     [88] [[起源]]の [DFN[Unicode [RUBYB[直列化]@en[serialization]]]]は、次の手順によって得られる文字列です
105     [SRC[>>25 6.1.]]。
106    
107     = [99] [[起源]]が [[URL scheme]]、[[host]]、[[port]] の[[3項組]]で''ない''なら、[[文字列]]
108     [CODE[[[null]]]] を返して停止します。
109     = [100] そうでなければ、 [VAR[result]] を[[起源]]の [[scheme]] とします。
110     = [101] [VAR[result]] の後ろに [CODE[://]] を付加します。
111     = [102] [[起源]]の [[host]] 部分を [VAR[result]] の後ろに付加します。
112     = [103] [[起源]]の [[port]] 部分が [[scheme]] で指定された[[プロトコル]]の[[既定のポート]]と異なっていれば、
113     [VAR[result]] の後ろに [CODE(char)[[[:]]]] を付加し、更に[[ポート番号]]を[[十進数]]で付加します。
114     = [104] [VAR[result]] を返します。
115    
116     ;; [105] >>103 は厳密には更に[[ポート番号]]を最小の桁数で (つまり[[先導0]]なしで) 表現するという制約が必要なはずです。
117    
118     **** Unicode 直列化
119    
120     [89] [[起源]]の [DFN[Unicode [RUBYB[直列化]@en[serialization]]]]は、次の手順によって得られる文字列です
121     [SRC[>>25 6.1.]]。
122    
123     = [90] [[起源]]が [[URL scheme]]、[[host]]、[[port]] の[[3項組]]で''ない''なら、[[文字列]]
124     [CODE[[[null]]]] を返して停止します。
125     = [91] そうでなければ、 [VAR[result]] を[[起源]]の [[scheme]] とします。
126     = [92] [VAR[result]] の後ろに [CODE[://]] を付加します。
127     = [93] [[起源]]の [[host]] 部分の各部品を次の手順により変換しつつ、 [CODE(char)[[[.]]]]
128     で連結して [VAR[result]] の後ろに付加します。
129     == [94] 部品が [[Aラベル]]なら、対応する[[Uラベル]]にします。
130     == [95] そうでなければ、部品をそのまま使います。
131     = [96] [[起源]]の [[port]] 部分が [[scheme]] で指定された[[プロトコル]]の[[既定のポート]]と異なっていれば、
132     [VAR[result]] の後ろに [CODE(char)[[[:]]]] を付加し、更に[[ポート番号]]を[[十進数]]で付加します。
133     = [97] [VAR[result]] を返します。
134    
135     ;; [98] >>96 は厳密には更に[[ポート番号]]を最小の桁数で (つまり[[先導0]]なしで) 表現するという制約が必要なはずです。
136    
137     ;; [106] [[ASCII]] 版との違いは、 >>94 で [[Uラベル]]に変換するところだけです。
138    
139 wakaba 1.28 ** IDNA
140    
141     [120] [[IDN]] について、[[起源]]の定義が [[URI]] であることから[[起源]]の決定に [[ToASCII]]
142     が必要となる場合があること、[[Unicode直列化]]を使う場面があることから[[起源]]の表記のために
143     [[ToUnicode]] が必要となる場合があることにより、[[起源]]は [[IDNA]] に依存しています。
144    
145     [122] [[RFC]] 上の[[起源]]の定義は [[IDNA2008]] に拠っていますが、 [[IDNA2003]]
146     と [[IDNA2008]] のどちらを実装するかによって結果が異なることへの注記もあります [SRC[>>23 8.4]]。
147     現実の[[Webブラウザー]]が実装しているものは厳密にはどちらの仕様とも異なっています。
148    
149 wakaba 1.21 * [CODE(HTTP)@en[Origin:]] 欄 (HTTP)
150    
151 wakaba 1.27 [109] [[HTTP]] の [DFN[[CODE(HTTP)@en[[[Origin:]]]]]] [[欄]]は、[[利用者エージェント]]が当該[[要求]]を発行することとなった元の[[起源]]を表します。
152     この[[起源]]が何であるか具体的な決定方法は、当該 [[API]] 等により定義されます。 [SRC[>>21]]
153    
154 wakaba 1.21 ** 仕様書
155 wakaba 1.20
156     [REFS[
157 wakaba 1.29 - [21] '''[CITE@en[RFC 6454 - The Web Origin Concept]] ([TIME[2011-12-12 09:13:37 +09:00]] 版) <http://tools.ietf.org/html/rfc6454#section-7>'''
158 wakaba 1.30 - [125] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-02-22 20:11:59 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#fetch>
159 wakaba 1.29 - [123] [CITE@en-US[XMLHttpRequest]] ([TIME[2012-02-28 13:24:26 +09:00]] 版) <http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-setrequestheader>
160 wakaba 1.20 ]REFS]
161    
162 wakaba 1.27 ** 構文
163    
164     [107] [CODE(HTTP)@en[[[Origin:]]]] 欄の構文は次のように定義されています [SRC[>>21]]。
165    
166     [FIG[
167     [PRE(ABNF code)[
168     origin = "Origin:" [[OWS]] origin-list-or-null [[OWS]]
169     origin-list-or-null = %x6E %x75 %x6C %x6C / origin-list
170     origin-list = serialized-origin *( SP serialized-origin )
171     serialized-origin = [[scheme]] "://" [[host]] [ ":" [[port]] ]
172     ; <[[scheme]]>, <[[host]]>, <[[port]]> from [[RFC 3986]]
173     ]PRE]
174     ]FIG]
175    
176     [108] つまり、文字列 [CODE(HTTP)[[[null]]]] ([[小文字]]) だけ、または [[ASCII直列化]]した[[起源]]の
177     [CODE(char)[[[SP]]]] 区切りのリストとなります。
178    
179     [113] [[利用者エージェント]]は任意の[[要求]]に [CODE(HTTP)@en[[[Origin:]]]] 欄を含めて[['''構いません''']]。
180     [SRC[>>21]]
181    
182     [114] 一つの[[要求]]に複数の [CODE(HTTP)@en[[[Origin:]]]] 欄を含めては[['''なりません''']]。
183     [SRC[>>21]]
184    
185     ;; [115] 複数含まれている場合に[[鯖]]がどう解釈するべきかは規定されていません。
186    
187     ** 複数の値
188    
189     [110] [[要求]]がなされるまでに複数の[[起源]]が関わっている場合、それをすべて列挙して[['''構いません''']]。
190     [SRC[>>21]]
191    
192     [EG[
193     [111] 例えば[[リダイレクト]]が発生した時、大元の[[起源]]と[[リダイレクト]]を行った[[起源]]を列挙して構いません。
194     ]EG]
195    
196     ;; [112] 列挙の順序や[[鯖]]による解釈の方法については特に規定されていません。
197    
198     [118] 隣接する[[起源]]が[RUBYB[同じ]@en[identical]]であっては[['''なりません''']]。
199     そうなってしまう場合は片方だけ送信しなければ[['''なりません''']]。 [SRC[>>21]]
200    
201     ** [CODE(HTTP)[null]]
202    
203     [116] 「[RUBYB[[[プライバシー]]重視]@en[privacy-sensitive]]」な文脈では値 [DFN[[CODE(HTTP)[[[null]]]]]]
204     を送信しなければ[['''なりません''']]。具体的に何が「[[プライバシー]]重視」な文脈かは
205     [CODE(HTTP)@en[[[Origin:]]]] 欄の仕様としては決めていませんが、[[応用]]ごとに決めることもできます。
206     [SRC[>>21]]
207    
208     [117] 値 [CODE(HTTP)[[[null]]]] はその他に[[3項組]]で表せない[[起源]]である時にも使われます。
209    
210 wakaba 1.30 ** fetch
211    
212     [126] [[fetch]] 操作においては、[[起源]]が呼び出し元により明示された場合、
213     それを [CODE(HTTP)@en[[[Origin:]]]] に使います。そうでない場合は「[[プライバシー]]重視」
214     な文脈として扱います。 [SRC[>>125]]
215    
216 wakaba 1.27 ** 処理モデル
217    
218     [119] [[鯖]]による解釈の方法は特に規定されていません。
219    
220 wakaba 1.21 ** 歴史
221 wakaba 1.19
222 wakaba 1.20 [22] 例によって [[IETF]] で政治的なごたごたに巻き込まれて必要以上に長くかかっています。
223     [[RFC]] になるよりずっと先に [[Webブラウザー]]で実装が進みました。
224    
225 wakaba 1.2 [1]
226     [CITE[Cross-Site Request Forgery]] ([TIME[2008-07-11 00:28:05 +09:00]] 版) <http://crypto.stanford.edu/websec/csrf/>
227    
228     [2]
229     [CITE[Origin Header for CSRF Mitigation]] ([TIME[2008-11-30 15:01:02 +09:00]] 版) <http://crypto.stanford.edu/websec/specs/origin-header/>
230    
231     [3]
232 wakaba 1.3 [[HTML5]] の[[ナビゲーション]]の[[算法]]に組み込まれたみたいです。。。
233    
234 wakaba 1.4 [4] [CITE@en[(X)HTML5 Tracking]] ([TIME[2009-01-15 07:15:24 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=2668&to=2669>
235    
236 wakaba 1.5 [5] [CITE@en[ACTION-96: Origin removal]] ([[Henri Sivonen]] 著, [TIME[2009-01-19 08:33:27 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2009Jan/0210.html>
237    
238 wakaba 1.19 [6] [CITE@en[draft-abarth-origin-00 - The HTTP Origin Header]] ([TIME[2009-01-22 10:33:27 +09:00]] 版) <http://tools.ietf.org/html/draft-abarth-origin-00>
239    
240     [7] [CITE@en[(X)HTML5 Tracking]]
241     ([TIME[2009-09-29 23:36:58 +09:00]] 版)
242     <http://html5.org/tools/web-apps-tracker?from=4010&to=4011>
243    
244     [8] [CITE[IRC logs: freenode / #whatwg / 20090821]]
245     ([TIME[2009-10-12 19:18:16 +09:00]] 版)
246     <http://krijnhoetmer.nl/irc-logs/whatwg/20090821#l-235>
247    
248     [9] [CITE@en[Security/Origin - MozillaWiki]]
249     ([TIME[2009-10-09 22:03:56 +09:00]] 版)
250     <https://wiki.mozilla.org/Security/Origin>
251    
252     [20] [CITE@en[The HTTP Sec-From Header]] draft-abarth-origin-01 の頃は [CODE(HTTP)@en[[[Sec-From:]]]]
253     という名前が提案されていました。
254    
255     [10] [CITE[IRC logs: freenode / #whatwg / 20090929]]
256     ([TIME[2009-12-02 08:29:55 +09:00]] 版)
257     <http://krijnhoetmer.nl/irc-logs/whatwg/20090929>
258    
259     [11] [CITE[IRC logs: freenode / #whatwg / 20091002]]
260     ([TIME[2009-12-04 00:35:25 +09:00]] 版)
261     <http://krijnhoetmer.nl/irc-logs/whatwg/20091002#l-620>
262    
263     [12] [CITE[IRC logs: freenode / #whatwg / 20091204]]
264     ([TIME[2009-12-27 16:46:13 +09:00]] 版)
265     <http://krijnhoetmer.nl/irc-logs/whatwg/20091204#l-293>
266    
267     [13] [CITE@en[Security/Origin - MozillaWiki]]
268     ([TIME[2010-10-06 06:03:55 +09:00]] 版)
269     <https://wiki.mozilla.org/Security/Origin>
270    
271     [14] [CITE[IRC logs: freenode / #whatwg / 20101109]]
272     ( ([TIME[2010-11-18 23:22:34 +09:00]] 版))
273     <http://krijnhoetmer.nl/irc-logs/whatwg/20101109#l-206>
274    
275     [15] [CITE[drafts/origin.xml at master from abarth's ietf-websec - GitHub]]
276     ( ([TIME[2011-02-13 13:01:41 +09:00]] 版))
277     <https://github.com/abarth/ietf-websec/blob/master/drafts/origin.xml>
278    
279     [16] [CITE[IRC logs: freenode / #whatwg / 20110815]]
280     ( ([TIME[2011-08-27 15:22:54 +09:00]] 版))
281     <http://krijnhoetmer.nl/irc-logs/whatwg/20110815#l-134>
282    
283     [17] [CITE[IRC logs: freenode / #whatwg / 20111022]]
284     ( ([TIME[2011-10-23 18:08:47 +09:00]] 版))
285     <http://krijnhoetmer.nl/irc-logs/whatwg/20111022>
286    
287     [18] [CITE@en[Web Applications 1.0 r6941 Drop old origin definitions that no longer matter.]]
288     ( ([TIME[2012-01-31 09:48:00 +09:00]] 版))
289     <http://html5.org/tools/web-apps-tracker?from=6940&to=6941>
290    
291     [19] [CITE[Widget Access Request Policy]]
292     ( ([TIME[2012-02-04 04:00:27 +09:00]] 版))
293 wakaba 1.29 <http://dev.w3.org/2006/waf/widgets-access/#dfn-origin>
294    
295     ** 関連
296    
297     [124] [CODE(HTTP)@en[[[Origin:]]]] を [CODE(DOMi)@en[[[XMLHttpRequest]]]] で[[著者]]が指定することはできません
298     [SRC[>>123]]。

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24