Опасный Python Ключевые слова?

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

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

(1) the code is not allowed to import ANY MODULE

(2) the code is not allowed to read or write any data, connect to the network etc

(целью каждого скрипта является циклический просмотр списка, вычисление некоторых данных с введенного им ввода и возврат вычисленного значения)

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

Я подумал об использовании следующего подхода: check that the word 'import' is not used (so we are guaranteed that no modules are imported)

тем не менее, пользователю (при желании) было бы возможно написать код для чтения / записи файлов и т. д. (скажем, используя open ).

Тогда возникает вопрос:

(1) где я могу получить «глобальный» список методов python (например, open )?

(2) Есть ли какой-то код, который я мог бы добавить к каждому сценарию, который был отправлен мне (вверху), который сделает некоторые «глобальные» методы недействительными для этого скрипта (например, любое использование open ключа приведет к исключение)?

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

EDIT: предположим, что я уверен, что import находится в файле, и что в нем нет возможных вредных методов (таких как open , eval и т. Д.). могу ли я сделать вывод, что файл SAFE? (можете ли вы придумать какие-либо другие «опасные» способы использования встроенных методов?)

4 Solutions collect form web for “Опасный Python Ключевые слова?”

Этот момент еще не сделан, и он должен быть:

Вы не сможете защитить произвольный код Python.

Виртуальная машина – это путь, если вы не хотите, чтобы проблемы безопасности поднимались на wazoo.

Вы все еще можете запутать import без использования eval :

 s = '__imp' s += 'ort__' f = globals()['__builtins__'].__dict__[s] ** BOOM ** 

Встроенные функции .

Ключевые слова .

Обратите внимание, что вам нужно будет делать такие вещи, как искать «файл» и «открыть», так как оба могут открывать файлы.

Кроме того, как отмечали другие, это не на 100% наверняка остановит кого-то, кто решил вставить вредоносный код.

Подход, который должен работать лучше, чем строка, соответствующая нам, чтобы использовать модуль ast , анализировать код python, фильтровать белый список на дереве (например, разрешать только базовые операции), а затем компилировать и запускать дерево.

См. Этот хороший пример Эндрю Далке об управлении АСТ.

  • Python: понимание составления двух словарей
  • Как получить широту и долготу с помощью python
  • Пытаясь заставить PyCharm работать, продолжайте получать «интерпретатор Python не выбран»,
  • Python: разделение строки на элементы и добавление их в список
  • Приложения не будут запускаться в GAE - «невозможно связать с localhost: 0»
  • Как экспортировать конкретный лист с помощью нового (v3) API Google Drive
  • пути python и порядок импорта
  • В чем разница между списком, словарем и кортежем в Python?
  • Python - лучший язык программирования в мире.