Предотвращение импорта Python-кода определенным модулям?

16
задан 29 August 2009 в 04:39
поделиться

5 ответов

Если вы поместите None в sys.modules для имени модуля, in не будет импортироваться ...

>>> import sys
>>> import os
>>> del os
>>> sys.modules['os']=None
>>> import os
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named os
>>>
23
ответ дан 30 November 2019 в 15:26
поделиться

Проверяли ли вы статью python.org на SandboxedPython и связанную статью ?

На обеих страницах есть ссылки на другие ресурсы .

В частности, PyPi RestrictedPython позволяет вам точно определять, что доступно, и имеет несколько «безопасных» значений по умолчанию на выбор.

16
ответ дан 30 November 2019 в 15:26
поделиться

К сожалению, я думаю, что то, что вы пытаетесь сделать, в принципе невозможно. Если пользователи могут выполнять произвольный код в вашем приложении, они могут делать все, что захотят. Даже если бы вы смогли запретить им импортировать определенные модули, ничто не помешало бы им написать эквивалентную функциональность самостоятельно (с нуля или используя некоторые из доступных модулей).

Я действительно не знаю специфики реализации песочница в Python, но я могу представить, что это нужно делать на уровне интерпретатора, а это далеко не так просто!

1
ответ дан 30 November 2019 в 15:26
поделиться

Открытый исходный код SDK Google App Engine содержит подробную и надежную реализацию механизма остановки импорта нежелательных модулей (чтобы помочь обнаружить код, пытающийся импортировать модули, которые не доступны в производственных экземплярах App Engine), хотя даже это можно было бы нарушить, если бы пользовательский код был злым, а не ошибочным (производственные экземпляры, очевидно, имеют больше уровней защиты, например, просто не имея этих модулей вообще ;-)

Итак, все зависит от того, насколько глубокой должна быть ваша защита. В одном крайнем случае вы просто прячете встроенный __ import __ в другое место и заменяете его своей функцией, которая выполняет все необходимые проверки, прежде чем делегировать __ builtin __ ; это может быть 20 строк кода, 30 минут на внедрение и тщательное тестирование ... но это может не защитить вас надолго, если кто-нибудь убедительно предложит мне миллион долларов за взлом вашей системы (и, гипотетически, я не был хорошим парнем) Я, конечно, такой парень ;-). С другой стороны, вы развертываете серию углубленных уровней защиты, что может занять тысячи строк и недель работы по внедрению и тестированию - при таком бюджете ресурсов я, несомненно, мог бы реализовать что-то Я мог бы невозможно проникнуть (но всегда есть риск, что кто-то ЕЩЕ РАЗУМУМ и более разбираюсь в Python, чем я, конечно!)

Итак, насколько глубоко вы хотите зайти, или, скорее, насколько глубоко вы можете ПОЗВОЛЯТЬ за идти ...?

но это может не защитить вас надолго, если кто-то заслуженно предложит мне миллион долларов за взлом вашей системы (и, гипотетически, я не был из тех парней, которых я на самом деле ЕСТЬ, курс;-). С другой стороны, вы развертываете серию углубленных уровней защиты, что может занять тысячи строк и недель работы по внедрению и тестированию - при таком бюджете ресурсов я, несомненно, мог бы реализовать что-то Я мог бы не в состоянии проникнуть (но всегда есть риск, что кто-то ЕЩЕ РАЗУМНЕЕ и более разбираюсь в Python, чем я, конечно!)

Итак, насколько глубоко вы хотите зайти, или, скорее, насколько глубоко вы можете ПОЗВОЛЯТЬ за идти ...?

но это могло не защитить вас надолго, если бы кто-нибудь заслуженно предложил мне миллион долларов за взлом вашей системы (и, гипотетически, я не был из тех парней, которых я на самом деле ЕСТЬ, курс;-). С другой стороны, вы развертываете серию углубленных уровней защиты, что может занять тысячи строк и недель работы по внедрению и тестированию - при таком бюджете ресурсов я, несомненно, мог бы реализовать что-то Я мог бы не в состоянии проникнуть (но всегда есть риск, что кто-то ЕЩЕ РАЗУМНЕЕ и более разбираюсь в Python, чем я, конечно!)

Итак, насколько глубоко вы хотите зайти, или, скорее, насколько глубоко вы можете ПОЗВОЛЯТЬ за идти ...?

8
ответ дан 30 November 2019 в 15:26
поделиться

Вы можете перегрузить механизм импорта. Мы использовали это, чтобы иметь систему лицензирования для плагинов, вы можете легко получить белый / черный список имен модулей.

1
ответ дан 30 November 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: