Можно установить HTTP_PROXY
в сценариях CGI, передав заголовок Proxy
. Если сценарий использует запросы на загрузку файлов, запросы будут успешно использовать предоставленный злоумышленником прокси-сервер для выполнения запросов.
Это должно быть смягчено, как в Perl (с 2001 года), Ruby и библиотеках, таких как curl.
Я подтвердил, что HTTP_PROXY
(в верхнем регистре) принимается так же, как и обычный строчный http_proxy
(запросы 2.7.0)
Мы долго обсуждали это в IRC. У нас здесь сложный набор мнений, но вот они:
Session.trust_env
. Установка его на False
полностью и полностью снижает этот риск.Я готов рассмотреть возможность выдачи предупреждений при выполнении запросов внутри процесса CGI с помощью trust_env=True
и даже готов рассмотреть возможность принуждения trust_env
к False
в такой ситуации, но реально для кода Python правильным решением будет просто _не запускать ваши приложения внутри CGI_.
Имеет смысл для меня. Избегание HTTP_PROXY (верхний регистр) в контексте CGI, вероятно, было бы хорошим шагом, но если запросы не делают этого напрямую, вероятно, нет смысла принимать активные меры. Я сам всегда использую только wsgi. Я пойду дальше и закрою это.
@remram44 remram44 Что бы это ни стоило, я бы _сердечно_ поддержал исправление для метода urllib.request
модуля stdlib getproxies
для реализации такого рода проверки. Это кажется гораздо более продуктивным местом для установки патча. =) Если вы хотите открыть отчет об ошибке для этого, я с радостью присоединюсь: я даже могу добровольно написать патч сам!
Я подал cpython-27568 .
Самый полезный комментарий
Мы долго обсуждали это в IRC. У нас здесь сложный набор мнений, но вот они:
Session.trust_env
. Установка его наFalse
полностью и полностью снижает этот риск.Я готов рассмотреть возможность выдачи предупреждений при выполнении запросов внутри процесса CGI с помощью
trust_env=True
и даже готов рассмотреть возможность принужденияtrust_env
кFalse
в такой ситуации, но реально для кода Python правильным решением будет просто _не запускать ваши приложения внутри CGI_.