Защита импортированных модулей от повреждения сторонним кодом

Если в моем коде используются сторонние модули, которым нельзя доверять, есть ли что-нибудь, чтобы предотвратить такую ​​ситуацию:

UntrustedModule.py:

import random random.random = lambda : 4 

MyModule.py:

 import random import UntrustedModule print (random.random()) 

где только импорт этого модуля нарушает предположения о других, не связанных между собой?

3 Solutions collect form web for “Защита импортированных модулей от повреждения сторонним кодом”

Нет, вы не можете иметь такую ​​гарантию в Python, по крайней мере, не в реализации CPython. Когда вы импортируете модуль, его код запускается, и он имеет полный доступ к каждой части интерпретатора (и, вероятно, к большим частям вашей системы). Невозможно избежать этого. Неразумно когда-либо загружать ненадежный код, потому что его можно так много сделать.

Однако вы можете быть заинтересованы в том, чтобы запустить процесс в изолированном процессе и общаться с ним только IPC. Это огромная тема, и это зависит от степени изоляции, в которой вы нуждаетесь, и от того, насколько вы доверяете внешнему коду.


PyPy реализует некоторые функции песочницы . Это не так просто, как просто «превратить песочницу», но это один из многих способов изолировать ненадежный код.

Вы можете сделать

 reload(random) 

чтобы перезагрузить его из источника или. чтобы восстановить его, как он должен быть.

Python будет импортировать в порядке поиска локального пути (каталог, из которого был выполнен скрипт), а затем любые пути, перечисленные в переменной среды PYTHONPATH.

Лучшим решением было бы проверить и написать тесты против вашего ненадежного модуля.

  • Используйте subprocess.communicate () для соединения stdin без ожидания процесса
  • использовать существующее поле как _id, используя elasticsearch dsl python DocType
  • Python: создание динамических функций
  • Добавление StructuredProperty к модели в NDB
  • Почему в Python отсутствует явная проверка пустоты (например, `is Empty`)
  • Воссоздание предложения с его позиций
  • Объект Python .__ repr __ (self) должен быть выражением?
  • генерировать 3 разных случайных числа
  • Измените один символ в строке?
  • Запись переменной в файл, включая имя
  • Странный питон при работе с циклом <сравнение
  • Python - лучший язык программирования в мире.