<p>запросы [безопасность] / PyOpenSSL не делает запросы более безопасными, но более хрупкими</p>

Созданный на 18 нояб. 2019  ·  3Комментарии  ·  Источник: psf/requests

Запросы добавили зависимость requests[security] много-много лет назад, потому что в модуле ssl в stdlib Python не хватало некоторых функций. Поскольку PEP 466 был реализован в Python 2.7.9, модуль ssl поддерживает проверку имени хоста и SNI. 2.7.9 был выпущен в 2014 году. Python 3.7.0 еще больше улучшил ситуацию, делегировав проверку имени хоста OpenSSL. Уровень совместимости PyOpenSSL в urllib3 использует устаревшую функцию ssl.match_hostname или backport.

Безусловное исправление urllib3 с помощью urllib3.contrib.pyopenssl.inject_into_urllib3 вызывает проблемы.

PyOpenSSL использует динамические обратные вызовы libffi (также известные как обратные вызовы старого стиля cffi). Обратные вызовы реализованы с помощью батутов и динамического создания собственного машинного кода. При этом используются либо исполняемые и записываемые страницы памяти, либо некоторые хаки с общими областями mmap (). Динамические обратные вызовы представляют собой угрозу безопасности и по уважительным причинам блокируются системами безопасности, такими как SELinux (deny_execmem). Мы с Армином Риго исследовали различные способы решения этих проблем, но есть простое решение. В конце концов Армин реализовал новую систему обратного вызова для cffi. Некоторые проблемы со старыми обратными вызовами задокументированы на https://cffi.readthedocs.io/en/latest/using.html#callbacks -old-style.

PyOpenSSL в настоящее время использует версии криптографии, которая сама зависит от asn1crypto. Проблема с asn1crypto и ctypes приводит к сбою Python в последних версиях macOS, https://github.com/pyca/pyopenssl/issues/874 и https://github.com/wbond/asn1crypto/issues/158 .

Из-за ошибок вроде https://bugzilla.redhat.com/show_bug.cgi?id=1535689 я убедил сопровождающих Fedora и RHEL исправлять запросы и отбрасывать inject_into_urllib3 некоторое время назад. Дистрибутивы работают с патчем https://src.fedoraproject.org/rpms/python-requests/blob/master/f/Don-t-inject-pyopenssl-into-urllib3.patch более года без каких-либо проблем. .

Предлагаю:

1) Удалите лишние requests[security] .
2) Удалите безоговорочно monkey-patch urllib3 из запросов.

Самый полезный комментарий

Похоже, это не было закрыто после слияния # 5443. Я думаю, что единственный невыполненный пункт - это requests[security] . Я склонен пока оставить это для тех, кто все еще использует <Python 2.7.9. Учитывая, что на этой неделе мы, скорее всего, выпустим новую минорную версию с urllib3, мы можем добавить уведомление об отказе от поддержки для следующего минорного релиза.

Я решу это завтра, если никто не обратится. Я думаю, что первоначальный запрос теперь решен.

Все 3 Комментарий

Точка данных для поддержки этого направления для запросов и urllib3: 91% (7 298 352/7 993 356) загрузок Python 2.7.X для urllib3 были на Python 2.7.9+. Взято из общедоступного набора данных для скачивания на сегодня.

Соотношение еще больше. Python 2.7.5 на машинах RHEL 7 также имеет обратный порт PEP 466.

$ rpm -qa python
python-2.7.5-88.el7.x86_64
$ python
Python 2.7.5 (default, Sep 26 2019, 13:23:47) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.SSLContext(ssl.PROTOCOL_SSLv23).check_hostname
False

Похоже, это не было закрыто после слияния # 5443. Я думаю, что единственный невыполненный пункт - это requests[security] . Я склонен пока оставить это для тех, кто все еще использует <Python 2.7.9. Учитывая, что на этой неделе мы, скорее всего, выпустим новую минорную версию с urllib3, мы можем добавить уведомление об отказе от поддержки для следующего минорного релиза.

Я решу это завтра, если никто не обратится. Я думаю, что первоначальный запрос теперь решен.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

NoahCardoza picture NoahCardoza  ·  4Комментарии

cnicodeme picture cnicodeme  ·  3Комментарии

jake491 picture jake491  ·  3Комментарии

eromoe picture eromoe  ·  3Комментарии

brainwane picture brainwane  ·  3Комментарии