2011-07-17 5 views
2

コマンドライン引数(argv [0]、argv [1]など)を出力するCGIスクリプト(コンパイル済みCプログラム)があります。CGIスクリプトに等号が含まれているとパラメータが受信されない

私がhttp://ajf.me/c/?abcを試してみると、2番目のパラメータとして「abc」が得られます。

しかし、私が試してみると、http://ajf.me/c/?a=bcは2番目のパラメータがありません。

=を使用すると、パラメータがプログラムに渡されないのはなぜですか?

それがここで問題とCコードの場合:そのコマンドラインでCGIプログラムにパラメータを渡す

#include <stdio.h> 

int main (int argc, char *argv[]) { 
    int i; 
    printf("Content-Type: text/html;charset=utf-8\n\n"); 
    printf("<!DOCTYPE html>\n"); 
    printf("<html>\n"); 
    printf("<head>\n"); 
    printf("<title>ajf.me powered by ANSI C!</title>\n"); 
    printf("</head>\n"); 
    printf("<body>\n"); 
    printf("<h2>Supplied Arguments</h2>\n"); 
    printf("argc: %d\n", argc); 
    printf("<ol>\n"); 
    for (i = 0; i < argc; ++i) { 
     printf("<li>%s</li>\n", argv[i]); 
    } 
    printf("</ol>\n"); 
    printf("<em>Yes, this is vulnerable to null-byte injection. For instance, <a href=\"?Injected%%00Null\" style=\"font-family: monospace; color: green;\">?Injected\\0Null</a>.</em>\n"); 
    printf("</body>\n"); 
    printf("</html>\n"); 
} 
+0

これらの_printf_呼び出しよりもリテラル文字列の連結に頼らないのはなぜですか? – sidyll

答えて

6

は、Webサーバーの異常でなければなりません。通常、?の後の部分は、QUERY_STRINGという環境変数で使用できます。

CGI specificationを確認することはおそらく価値があります。

+0

ありがとう!私は今それをもっとよく理解しています。 [これは今のように見えます](http://ajf.me/c/?test = test&other = thing&this = works&yes = it&does =:\)) – Andrea

関連する問題