Requests: Migration HTTPoxy

Créé le 18 juil. 2016  ·  4Commentaires  ·  Source: psf/requests

https://httpoxy.org/

Il est possible de définir le HTTP_PROXY dans les scripts CGI en passant l'en-tête Proxy . Si le script utilise des requêtes pour télécharger des fichiers, les requêtes utiliseront volontiers le proxy fourni par l'attaquant pour effectuer des requêtes.

Cela devrait être atténué comme c'est le cas dans Perl (depuis 2001), Ruby et des bibliothèques comme curl.

J'ai confirmé que HTTP_PROXY (en majuscule) est accepté ainsi que le http_proxy conventionnel en minuscules (demandes 2.7.0)

Commentaire le plus utile

Nous en avons longuement discuté sur IRC. Nous avons ici un ensemble complexe d'opinions, mais les voici :

  1. En général, si vous exécutez votre script Requests dans un emplacement où votre application autorise les écritures dans l'environnement, vous devez désactiver la recherche de Requests dans l'environnement. Nous avons un drapeau pour cela : Session.trust_env . Le fixer à False entièrement et complètement atténue ce risque.
  2. CGI est un mode _extrêmement_ rare pour exécuter du code Python. Il est étonnamment inefficace, et pour autant que je sache, aucune application Python n'est développée en l'utilisant.
  3. Notre recherche de proxies est en fait effectuée par la bibliothèque standard Python. Cela signifie que le correctif le plus efficace se trouve dans la bibliothèque standard Python elle-même, ce qui peut atténuer le problème non seulement pour les requêtes mais pour tous les autres clients de la bibliothèque standard Python.

Je suis prêt à envisager la possibilité de déclencher des avertissements lors de l'exécution de Requests dans un processus CGI avec trust_env=True , et je suis même prêt à envisager la possibilité de forcer trust_env à False dans une telle situation, mais de manière réaliste pour le code Python, la bonne solution consiste simplement à _ne pas exécuter vos applications dans CGI_.

Tous les 4 commentaires

Nous en avons longuement discuté sur IRC. Nous avons ici un ensemble complexe d'opinions, mais les voici :

  1. En général, si vous exécutez votre script Requests dans un emplacement où votre application autorise les écritures dans l'environnement, vous devez désactiver la recherche de Requests dans l'environnement. Nous avons un drapeau pour cela : Session.trust_env . Le fixer à False entièrement et complètement atténue ce risque.
  2. CGI est un mode _extrêmement_ rare pour exécuter du code Python. Il est étonnamment inefficace, et pour autant que je sache, aucune application Python n'est développée en l'utilisant.
  3. Notre recherche de proxies est en fait effectuée par la bibliothèque standard Python. Cela signifie que le correctif le plus efficace se trouve dans la bibliothèque standard Python elle-même, ce qui peut atténuer le problème non seulement pour les requêtes mais pour tous les autres clients de la bibliothèque standard Python.

Je suis prêt à envisager la possibilité de déclencher des avertissements lors de l'exécution de Requests dans un processus CGI avec trust_env=True , et je suis même prêt à envisager la possibilité de forcer trust_env à False dans une telle situation, mais de manière réaliste pour le code Python, la bonne solution consiste simplement à _ne pas exécuter vos applications dans CGI_.

Cela a du sens pour moi. Éviter HTTP_PROXY (majuscule) dans un contexte CGI serait probablement une bonne chose, mais si les requêtes ne le font pas directement, il n'y a probablement aucun sens à ce que vous preniez des mesures actives. Moi-même, je n'utilise que wsgi. Je vais continuer et fermer ça.

@ remram44 Pour ce que ça vaut, je soutiendrais _heartily_ un correctif à la méthode urllib.request du module getproxies #$0$#$ du module stdlib pour implémenter ce type de vérification. Cela semble être un endroit beaucoup plus productif pour mettre le patch. =) Si vous souhaitez ouvrir un rapport de bogue pour cela, je serai heureux d'intervenir : je peux même me porter volontaire pour écrire le correctif moi-même !

J'ai déposé python-27568 .

Cette page vous a été utile?
0 / 5 - 0 notes