Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
QUERY_STRING check in cgi.c
- From: Ken-ichi Hirose <kenzo-@xxxxxxxxxx>
- Date: Fri, 14 Apr 2000 03:30:52 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 00390
広瀬です。
AN HTTPD を作っている中田さんから
#AN HTTPD <URI:http://www.st.rim.or.jp/~nakata/>
以下のような指摘と、code を頂きました。
#元々の問題は IIS シリーズと AN HTTPD を Win9x で動作させた時に
#namazu.cgi で QUERY(引数?)が無いと QUERY_STRING が作成されないため
#security check に引っかかって動作しないというものでした。
--- ここから ---
AN HTTPD を Win9x で動作させた時にQUERYを指定しないで動作させた時に
環境変数の QUERY_STRING が無いのは以下のような理由がある。
(1)Win95/98 では 空の環境変数をセットすると
環境変数自体をセットしない。
(2)CGI/1.1では、空の環境変数 と セットされていない環境変数
は同じとみなす。
#<URI:http://search.ietf.org/internet-drafts/draft-coar-cgi-v11-03.txt>の
#6.1. Request Metadata (Metavariables) に、
#> This specification does not distinguish between the
#> representation of null values and missing ones. Whether null
#> or missing values (such as a query component of "?" or "",
#> respectively) are represented by undefined metavariables or by
#> metavariables with values of "" is implementation-defined.
#とあります。
#Metavariables が UNIX の場合に Environment Variables になるというのは、
#どこかに記述があったと思います。
#Windows の場合については、CGI/1.2 では触れられるようです。
(3)QUERY_STRING は空の場合があるが、CGIで SCRIPT_NAME が空
のことはない。
したがって、cgi.c の get_query_string() は、汎用で、以下のようにしたらど
うだろうかと思います。
ご検討いただければ幸いです。
static char *
get_query_string(void)
{
int contlen;
char *script_name = "";
char *query_string = "";
if ((script_name = getenv("SCRIPT_NAME"))) {
/*
* get SCRIPT_NAME from environmental variables.
*/
if ((query_string = getenv("QUERY_STRING")) == NULL) {
/*
* if QUERY_STRING is not set, should be "".
*/
query_string = "";
}
contlen = strlen(query_string);
if (contlen > CGI_QUERY_MAX) {
printf(MSG_MIME_HEADER);
printf(_("Too long QUERY_STRING"));
exit(EXIT_FAILURE);
}
} else {
return NULL;
}
return query_string;
}
--- ここまで ---
で、6.1.8. QUERY_STRING には
:
Servers MUST supply this value to scripts. The QUERY_STRING
value is case-sensitive. If the Script-URI does not include a
query component, the QUERY_STRING metavariable MUST be defined
as an empty string ("").
とあると思うのですが、結局どっちだと理解するのが正しいのでしょう?
ご意見を聞かせていただけると助かります。_o_
#上記のような方向で修正すれば __WIN32 は取れるのですが、
#security の話ですし。。
#cmd と cgi を分けたとはいえ QUERY 周りは。。
Best regards,
----
Ken-ichi Hirose kenzo-@xxxxxxxxxx