Es posible configurar HTTP_PROXY
en scripts CGI pasando el encabezado Proxy
. Si el script utiliza solicitudes para descargar archivos, las solicitudes utilizarán felizmente el proxy proporcionado por el atacante para realizar solicitudes.
Esto debería mitigarse como en Perl (desde 2001), Ruby y bibliotecas como curl.
Confirmé que se acepta HTTP_PROXY
(en mayúsculas) así como el convencional http_proxy
minúsculas (solicitudes 2.7.0)
Hemos estado discutiendo esto extensamente en IRC. Tenemos un conjunto complejo de opiniones aquí, pero aquí están:
Session.trust_env
. Establecerlo en False
mitiga por completo este riesgo.Estoy dispuesto a considerar la posibilidad de generar advertencias al ejecutar Solicitudes dentro de un proceso CGI con trust_env=True
, e incluso estoy dispuesto a considerar la posibilidad de forzar trust_env
a False
en tal situación, pero de manera realista para el código Python, la solución correcta a esto es simplemente _no ejecutar sus aplicaciones dentro de CGI_.
Tiene sentido para mi. Evitar HTTP_PROXY (mayúsculas) en un contexto CGI probablemente sería una buena medida, pero si las solicitudes no lo hacen directamente, probablemente no tenga sentido que tome medidas activas. Yo solo uso wsgi. Voy a seguir adelante y cerrar esto.
@ remram44 Por lo que vale, apoyaría _de corazón_ un parche para el método urllib.request
del módulo getproxies
#$0$#$ de stdlib para implementar este tipo de verificación. Ese parece un lugar mucho más productivo para colocar el parche. =) Si desea abrir un informe de error para eso, con gusto intervendré: ¡incluso puedo ofrecerme como voluntario para escribir el parche yo mismo!
Comentario más útil
Hemos estado discutiendo esto extensamente en IRC. Tenemos un conjunto complejo de opiniones aquí, pero aquí están:
Session.trust_env
. Establecerlo enFalse
mitiga por completo este riesgo.Estoy dispuesto a considerar la posibilidad de generar advertencias al ejecutar Solicitudes dentro de un proceso CGI con
trust_env=True
, e incluso estoy dispuesto a considerar la posibilidad de forzartrust_env
aFalse
en tal situación, pero de manera realista para el código Python, la solución correcta a esto es simplemente _no ejecutar sus aplicaciones dentro de CGI_.