いいづか
[HomePage]
2000/01/10(月) 13:37:52
B-Cusさんがおっしゃっている「QUERY_STRINGを読む」
関数を作ったことがあるので掲示しておきます。
query_parm(NULL)でパラメタの取得、query_parm("キー")で
その値をかえします。よろしければどうぞ。
(コピーする際は、全角スペースを半角スペースまたはタブに
置き換えてください)。
char *query_parm( char *key )
{
static char *query_key[256], *query_val[256];
int content_length;
char *envp, *query_string;
int ix;
if ( key == NULL ) {
/* decide whether method to retrieve parameters */
envp = getenv ( "REQUEST_METHOD" );
if ( envp == NULL || *envp == '\0' ) {
query_key[0] = NULL;
return ( NULL );
}
/* set parameters into query_key[] */
if ( !(strncmp ( envp, "GET", 3 ) ) ) {
envp = getenv( "QUERY_STRING" ) ;
if ( envp == NULL || *envp == '\0' ) {
query_key[0] = ( char *) malloc( sizeof (char *) );
query_key[0] = NULL;
return ( NULL );
} else {
query_string =
malloc( strlen(getenv("QUERY_STRING")) + 1 );
strcpy ( query_string, getenv("QUERY_STRING"));
}
} else {
envp = getenv( "CONTENT_LENGTH" );
content_length = atoi( envp );
query_string = malloc( content_length + 1 );
read ( 0, query_string, content_length );
query_string[content_length] = '\0';
}
/* pharse into array */
for ( ix = 0; 1 ; ix ++) {
query_key[ix] = strtok(ix == 0 ? query_string : NULL, "=" );
if ( query_key[ix] == NULL ) {
query_val[ix] = NULL;
break;
}
query_val[ix] = strtok(NULL, "&" );
if ( query_val[ix] == NULL ) {
break;
}
}
return ( NULL ) ;
} else {
for ( ix = 0 ; query_key[ix] != NULL; ix++) {
if ( strlen( query_key[ix] ) == strlen( key ) ) {
if ( !strcmp ( query_key[ix], key ) ) {
return ( query_val[ix] );
}
}
}
return ( NULL ) ;
}
}
B-Cus
2000/01/11(火) 05:40:32
> WINにanHTTPDいれてやってみたらエスケープされませんでした
| や ; などもエスケープされませんでしたか?
なら、wwwboard か wwwlng あたりを anHTTPD で動かすと、
悪意のあるユーザが任意のプログラムを実行できてしまうかも。
# ほんとにできるかどうかは知らない。
http://www.tohoho-web.com/cgi-bin/wwwlng.txt
...
&appendMessage($ARGV[1], 1);
...
sub appendMessage #($file, $lockflag){
local($file, $lockflag) = @_;
...
open(OUT, ">> $file");