2

コマンドライン引数 (argv[0]、argv[1] など) を出力する CGI スクリプト (コンパイルされた C プログラム) があります。

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

ただし、http://ajf.me/c/ ?a=bc を試してみると、2 番目のパラメーターが得られません。

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

ここで重要な場合は、C コードです。

#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");
}
4

1 に答える 1

6

コマンド ラインで CGI プログラムにパラメーターを渡すことは、Web サーバーの異常である必要があります。通常、 の後の部分?は、 という環境変数で使用できますQUERY_STRING

CGI の仕様を確認する価値はあるでしょう。

于 2011-07-17T19:49:50.653 に答える