-
Notifications
You must be signed in to change notification settings - Fork 4
/
920.txt
83 lines (57 loc) · 4.23 KB
/
920.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
[2] [[CGI]] では、[[システム]]によっては[[CGIスクリプト]]の[[引数]]として特定の
[CODE(CGI)@en[[[QUERY_STRING]]]] を構文解析したものを渡すことになっています。
* 仕様書
[REFS[
- [11] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]]
-- [3] '''<http://tools.ietf.org/html/rfc3875#section-4.4>'''
-- [12] <http://tools.ietf.org/html/rfc3875#section-7>
]REFS]
* 文脈
[5] 元々この機能は [CODE(HTMLe)@en[isindex]] [[要素]]による[[問い合わせ]]が
[[URL query]] として送信されたものを処理することを想定していました。
[15] [CODE(HTMLe)@en[isindex]] [[要素]]は[[フォーム]]の登場により90年代に既に使われなくなり、
[TIME[2016年][year:2016]]までに [[Webブラウザー]]および[[仕様書]]でも完全に廃止されました。
[16] 理論上は [CODE(HTMLe)@en[isindex]] [[要素]]以外でも [[URL query]]
で同じような形式を採っていれば[[サーバー]]側の処理に使うことはできるのですが、
あまり一般的ではありません。
[17] 最早誰も [[CGI]] の[[仕様書]]をメンテナンスしていないため、
かつての規定が依然として形式的に有効ではあるのですが、実際上は誰も使っていない本機能も
[CODE(HTMLe)@en[isindex]] [[要素]]と共に廃止されたものとして扱うべきでしょう。
;; [18] 同じ情報は[[メタ変数]] [CODE(CGI)@en[QUERY_STRING]] でアクセスできるのですから、
本機能は不要です。
* 処理
[4] [[HTTP]] の [CODE(HTTP)@en[[[GET]]]] や [CODE(HTTP)@en[[[HEAD]]]] の[[要求]]であって、
[[URL]] の [[query]] が[[パーセント符号化]]されてい''ない'' [CODE(URI)[[[=]]]]
を含んでい''ない''場合、この機能が有効になります。 [SRC[>>3]]
[5] [[鯖]]は [[query]] を次の[[生成規則]]に従うものとして構文解析する[['''べきです''']] [SRC[>>3]]。
[PRE(ABNF code)[
search-string = search-word *( "+" search-word )
search-word = 1*schar
schar = unreserved | escaped | xreserved
xreserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "," |
"$"
]PRE]
;; [6] これに適合しない場合どうするべきかは明記されていません。
[7] >>5 によって構文解析した後、各 [CODE(ABNF)[search-word]] を[[パーセント復号]]し、
必要があれば[[システム定義]]の方法で符号化し、[[命令行]]の[[引数]]として使います。
[SRC[>>3]]
[8] この[[引数]]リストの一部または全部を構成できないときは[[命令行]]の引数をまったく生成しては[['''なりません''']]。
例えば[[引数]]の数が[[OS]]の制限を超えたとか、[[引数]]として表現できない語が存在するとかです。
[SRC[>>3]]
[9] [[CGIスクリプト]]は [CODE(CGI)@en[[[QUERY_STRING]]]] が [CODE(URI)[[[=]]]]
を含むかどうか検査し、含む場合は[[命令行]]を使わない[['''べきです''']]。 [SRC[>>3]]
;; [10] そもそも常に [CODE(CGI)@en[[[QUERY_STRING]]]] を使えば良い気がしますが・・・。
* SIP CGI の場合
[1] [[SIP]] CGI では、命令行[[引数]]は使用する'''べきではない ([[SHOULDNOT]])''' とされています。 [RFC 3050 5.4]
* 束縛
** POSIX
[13] [[Unix]] と [[POSIX]] 環境では、[[命令行]]は [CODE[[[main()]]]] [[関数]]の[[引数]]
[CODE[[[argc]]]]、[CODE[[[argv]]]] によりアクセスできます。 [[Bourne shell]]
で「[RUBYB[[[活性]]]@en[active]]」な[[文字]]は [CODE(char)[[[\]]]] で[[エスケープ]]されます。
[SRC[>>12]]
** その他
[14] [[AmigaDOS]] について [[RFC]] にはなぜか言及がありませんが、提供されないということでしょうか。
[19] [[WSGI]] や [[PSGI]] ではこの機能に相当するものは用意されていないようです。
* セキュリティー
[20] [[UNIX]] では、 [CODE[ps]] [[コマンド]]など[[プロセス]]の一覧で[[コマンドライン引数]]が外部から観測可能です。
[[第三者]]が[[プロセス]]一覧にアクセス可能な環境では、注意が必要です。