Подтвердить что ты не робот

Опасный 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

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

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Keywords.

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

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

Ответ 4

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

См. этот хороший пример от Andrew Dalke по управлению АСТ.

Ответ 5

встроенные функции/ключевые слова:

  • Eval
  • Exec
  • __import__
  • откройте
  • файл
  • вход
  • ExecFile
  • Печать может быть опасной, если у вас есть одна из этих немых оболочек, которые выполняют код при просмотре определенного выхода
  • STDIN
  • __builtins__
  • globals() и locals() должны быть заблокированы, иначе их можно использовать для обхода ваших правил.

Там, наверное, много других, о которых я не думал.

К сожалению, возможно такое дерьмо...

object().__reduce__()[0].__globals__["__builtins__"]["eval"]("open('/tmp/l0l0l0l0l0l0l','w').write('pwnd')")

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

Ответ 6

Используйте виртуальную машину вместо запуска ее в системе, о которой вы беспокоитесь.