1

(Ничего себе, это название отстой ... Не стесняйтесь делать предложения в комментариях или редактировать их, если у вас есть лучшие.)

У меня есть сервер с программой CGI, который получает URL-адрес в виде pathinfo, проверяет IP-адрес пользователя и перенаправляет его либо на прямой переход к этому URL-адресу (если они являются внутренними для нашей организации), либо отправляет их на URL-адрес через прокси-сервер. (если они внешние). Сам CGI прекрасно работает, но есть некоторые URL, для которых apache возвращает ошибку 404 Not Found вместо вызова скрипта. Похоже, что это связано с целевым URL, содержащим путь в кодировке URI. например,

http://myserver.org/cgi-bin/ipchk/http://other.server.org/10.1007%2F3-540-28519-9_8

возвращает 404, а

http://myserver.org/cgi-bin/ipchk/http://other.server.org/10.1007/3-540-28519-9_8

(тот же URL, но с декодированием %2F в /) работает правильно.

Я проверил (выводя в error_log при запуске), что при возврате 404 скрипт ipchk вообще не запускается. Эти ошибки определенно происходят от самого apache, а не от сценария, перенаправляющего пользователей на несуществующий URL.

Почему кодировка URL-адреса pathinfo влияет на способность apache найти сценарий ipchk и что мне нужно сделать, чтобы он передавал все /cgi-bin/ipchk/ URI в ipchk независимо от того, что может последовать?

1 ответ1

3

В рамках попытки защитить пользователей от кода CGI, который неправильно проверяет данные перед проверкой входящих путей, apache отклоняет (как 404 не найдено) URL-адреса, содержащие закодированные в виде URI формы прямой косой черты (%2F) или обратной косой черты (%5C), как объясняется в этой статье.

Чтобы обойти эту проверку, вы должны использовать apache 2.0.46 или новее и включить директиву AllowEncodedSlashes в конфигурации apache. (Эта директива не работает с .htaccess ; она разрешена только в контексте сервера или виртуального хоста.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .