CGI//命令行

スクリプト命令行 (CGI)

[2] CGI では、システムによってはCGIスクリプト引数として特定の QUERY_STRING を構文解析したものを渡すことになっています。

仕様書

文脈

[5] 元々この機能は isindex 要素による問い合わせURL query として送信されたものを処理することを想定していました。

[15] isindex 要素フォームの登場により90年代に既に使われなくなり、 までに Webブラウザーおよび仕様書でも完全に廃止されました。

[16] 理論上は isindex 要素以外でも URL query で同じような形式を採っていればサーバー側の処理に使うことはできるのですが、 あまり一般的ではありません。

[17] 最早誰も CGI仕様書をメンテナンスしていないため、 かつての規定が依然として形式的に有効ではあるのですが、実際上は誰も使っていない本機能も isindex 要素と共に廃止されたものとして扱うべきでしょう。

[18] 同じ情報はメタ変数 QUERY_STRING でアクセスできるのですから、 本機能は不要です。

処理

[4] HTTPGETHEAD要求であって、 URLqueryパーセント符号化されていない = を含んでいない場合、この機能が有効になります。 >>3

[5] query を次の生成規則に従うものとして構文解析するべきです >>3

      search-string = search-word *( "+" search-word )
      search-word   = 1*schar
      schar         = unreserved | escaped | xreserved
      xreserved     = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "," |
                      "$"

[6] これに適合しない場合どうするべきかは明記されていません。

[7] >>5 によって構文解析した後、各 search-wordパーセント復号し、 必要があればシステム定義の方法で符号化し、命令行引数として使います。 >>3

[8] この引数リストの一部または全部を構成できないときは命令行の引数をまったく生成してはなりません。 例えば引数の数がOSの制限を超えたとか、引数として表現できない語が存在するとかです。 >>3

[9] CGIスクリプトQUERY_STRING= を含むかどうか検査し、含む場合は命令行を使わないべきです>>3

[10] そもそも常に QUERY_STRING を使えば良い気がしますが・・・。

SIP CGI の場合

[1] SIP CGI では、命令行引数は使用するべきではない (SHOULDNOT) とされています。 [RFC 3050 5.4]

束縛

POSIX

[13] UnixPOSIX 環境では、命令行main() 関数引数 argcargv によりアクセスできます。 Bourne shell で「活性 (active) 」な文字\エスケープされます。 >>12

その他

[14] AmigaDOS について RFC にはなぜか言及がありませんが、提供されないということでしょうか。

[19] WSGIPSGI ではこの機能に相当するものは用意されていないようです。

セキュリティー

[20] UNIX では、 ps コマンドなどプロセスの一覧でコマンドライン引数が外部から観測可能です。 第三者プロセス一覧にアクセス可能な環境では、注意が必要です。