URL изменяется после обработки в C / CGI - PullRequest
0 голосов
/ 13 января 2010

У меня есть приложение C / CGI. Для того, чтобы перенаправить на ту же страницу

const char * redirect_page_format =
"<html>\n"
"<head>\n"
"<meta http-equiv=\"REFRESH\"\n"
"content=\"0;url=%s\">\n"
"</head>\n"
"</html>\n";
printf (redirect_page_format, getenv (URL));

До этого URL-адрес выглядит так: http://ipaddress/page.html".

Для некоторых страниц я могу правильно перенаправить.

Но некоторые html-страницы,

  1. В URL-адрес добавляется такой символ, как этот "http://ipaddress/page.htmlP"

  2. Или URL-адрес изменяется следующим образом:

http://ipaddress/page.htm

http://ipaddress/page.hX

Редактировать 1

Я отправлю URL через строку запроса. Это будет получено с помощью команды.

GETENV ( "QUERY_STRING")

Анализируя строку запроса, можно получить URL-адрес, который задается в качестве аргумента команды перенаправления.

printf (redirect_page_format, getenv (URL));

1 Ответ

0 голосов
/ 13 января 2010

Я не вижу ничего, что могло бы вызвать это в приведенном выше коде. Похоже, что какой-то своенравный указатель, пишущий где-то еще в скрипте, мог записать данные для повреждения конца строки переменной?

Что такое getenv(URL) в любом случае? Нет стандартной переменной среды CGI, которая дает вам текущий URL; вам обычно приходится утомительно собирать его вместе из REQUEST_METHOD / HTTP_HOST / SERVER_PORT / SCRIPT_NAME / PATH_INFO / QUERY_STRING. В Apache вы получаете REQUEST_URI, но он не работает на других серверах.

Хотя это обычно не вызывает проблему, которую вы цитируете, существует проблема с печатью текста в HTML-контексте, как у вас выше: у вас нет экранирования HTML, поэтому любые &, " или < символов в URL приведет к неверному выводу. Каждый раз, когда вы добавляете текст или значение атрибута из строки, вы должны экранировать ее HTML, иначе вы рискуете сделать дыру в безопасности между сайтами. (" и < вряд ли могут существовать в URL, но могут появиться в зависимости от того, как вы обрабатываете SCRIPT_NAME / PATH_INFO. & очень вероятно появится в URL.)

Наконец, <meta refresh> для перенаправления крайне нежелателен. Почему не правильное перенаправление на основе Location?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...