من الممكن تعيين 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 على ما يستحق ، أود _heartily_ دعم تصحيح لطريقة urllib.request
module's getproxies
لتنفيذ هذا النوع من الفحص. يبدو أن هذا مكان أكثر إنتاجية بكثير لوضع التصحيح. =) إذا كنت تريد فتح تقرير خطأ لذلك ، فسأكون سعيدًا بالرد: حتى أنني قد أتطوع لكتابة التصحيح بنفسي!
لقد قدمت cpython-27568 .
التعليق الأكثر فائدة
لقد كنا نناقش هذا باستفاضة في IRC. لدينا مجموعة معقدة من الآراء هنا ، ولكن ها هي:
Session.trust_env
. إن ضبطه علىFalse
كليًا ويخفف تمامًا من هذه المخاطر.أنا على استعداد للنظر في إمكانية رفع التحذيرات عند تشغيل الطلبات داخل عملية CGI
trust_env=True
، وأنا على استعداد أيضًا للنظر في إمكانية فرضtrust_env
علىFalse
في مثل هذه الحالة ، ولكن من الناحية الواقعية بالنسبة إلى كود Python ، فإن الحل الصحيح لذلك هو ببساطة عدم تشغيل تطبيقاتك داخل CGI_.