É possível definir HTTP_PROXY
em scripts CGI passando o cabeçalho Proxy
. Se o script usar solicitações para baixar arquivos, as solicitações usarão com prazer o proxy fornecido pelo invasor para fazer solicitações.
Isso deve ser mitigado como em Perl (desde 2001), Ruby e bibliotecas como curl.
Confirmei que HTTP_PROXY
(em maiúsculas) é aceito, assim como o convencional, em minúsculas http_proxy
(solicitações 2.7.0)
Temos discutido isso longamente no IRC. Temos um conjunto complexo de opiniões aqui, mas aqui estão elas:
Session.trust_env
. Configurá-lo para False
mitiga totalmente e completamente esse risco.Estou disposto a considerar a possibilidade de gerar avisos ao executar Requests dentro de um processo CGI com trust_env=True
, e estou disposto a considerar a possibilidade de forçar trust_env
a False
em tal situação, mas realisticamente para código Python a solução correta para isso é simplesmente _não executar seus aplicativos dentro do CGI_.
Faz sentido para mim. Evitar HTTP_PROXY (maiúsculas) em um contexto CGI provavelmente seria uma boa jogada, mas se as solicitações não estiverem fazendo isso diretamente, provavelmente não há sentido em você tomar medidas ativas. Eu mesmo só uso wsgi. Eu vou em frente e fechar isso.
@remram44 Se vale a pena, eu _heartily_ apoiaria um patch para o método urllib.request
do módulo getproxies
#$0$#$ do stdlib para implementar esse tipo de verificação. Esse parece ser um lugar muito mais produtivo para colocar o patch. =) Se você quiser abrir um relatório de bug para isso, eu entrarei em contato com prazer: eu posso até me voluntariar para escrever o patch eu mesmo!
Eu arquivei cpython-27568 .
Comentários muito úteis
Temos discutido isso longamente no IRC. Temos um conjunto complexo de opiniões aqui, mas aqui estão elas:
Session.trust_env
. Configurá-lo paraFalse
mitiga totalmente e completamente esse risco.Estou disposto a considerar a possibilidade de gerar avisos ao executar Requests dentro de um processo CGI com
trust_env=True
, e estou disposto a considerar a possibilidade de forçartrust_env
aFalse
em tal situação, mas realisticamente para código Python a solução correta para isso é simplesmente _não executar seus aplicativos dentro do CGI_.