Глубоко читая документацию Python site.py
, я обнаружил это в отношении .pth
файлов:
Пустые строки и строки, начинающиеся с #, пропускаются.Строки, начинающиеся с импорта (после пробела или табуляции), выполняются.
Эти два предложения легко пропустить.Они находятся в конце длинного абзаца, означающего, что сканирующие глаза легко пропустят их.Я скучал по ним даже тогда, когда активно искал их.
Пример выполнения кода взят из python3.6/site-packages/virtualenvwrapper-4.8.2-py2.7-nspkg.pth
:
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('virtualenvwrapper',));importlib = has_mfs and __import__('importlib.util');has_mfs and __import__('importlib.machinery');m = has_mfs and sys.modules.setdefault('virtualenvwrapper', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('virtualenvwrapper', [os.path.dirname(p)])));m = m or sys.modules.setdefault('virtualenvwrapper', types.ModuleType('virtualenvwrapper'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
Какова цель разрешенияВыполнение произвольного кода внутри .pth
файлов?
Каковы наилучшие методы проверки или защиты файлов .pth
, учитывая, что выполнение произвольного кода может иметь широкий отрицательный эффект?