CGI-скрипт не получает параметры, если они содержат знак равенства - PullRequest
2 голосов
/ 17 июля 2011

У меня есть CGI-скрипт (скомпилированная C-программа), который выводит свои аргументы командной строки (argv [0], argv [1] и т. Д.).

Если я пытаюсь http://ajf.me/c/?abc, я получаю«abc» в качестве второго параметра.

Однако, если я попытаюсь http://ajf.me/c/?a=bc, я не получу никакого второго параметра.

Почему использование = останавливает параметрыпередан в программу?

Если это имеет значение, вот код 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");
}

1 Ответ

6 голосов
/ 17 июля 2011

Передача параметров программе CGI в командной строке должна быть аномалией вашего веб-сервера. Обычно деталь после ? доступна в переменной окружения с именем QUERY_STRING.

Возможно, вам стоит пересмотреть CGI-спецификацию .

...