Опасный 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 определяет, какой из них неожиданен?
  • Конечные символы из строк, считанных из текстового файла, с использованием Python
  • Python RAD (развертывание рабочего стола)
  • с помощью SDK Google App Engine в pycharm
  • Каков максимальный лимит запросов Google Appengine Ndb GQL?
  • Использование @ ndb.tasklet или @ ndb.synctasklet в Google App Engine
  • reverse () не работает в литерале Python?
  • Импортирует более медленные скрипты python?
  • Работа с репозиторием GitHub Wiki с использованием Python
  • Решить путь обнаружения на модуле App Engine
  •  
    Interesting Posts for Van-Lav

    Печать без новой строки (печать 'a',) печатает пробел, как его удалить?

    Неопределенная переменная из импорта при использовании wxPython в pydev

    Каков наилучший дизайн для опроса модема для входящих данных?

    ImportError: нет модуля с именем paramiko

    Загрузка файла Django Rest Framework

    Как я могу работать с файлами Gzip, которые содержат дополнительные данные?

    Почему многопроцессорный код в заданном коде занимает больше времени, чем обычное последовательное выполнение?

    Формат плавает со стандартным модулем json

    Сериализация списка Python – самый быстрый метод

    переводить url с помощью google translate из скрипта python

    Как маршрутизировать сообщения журнала из многопроцессорного модуля в файл?

    Python: Как совместить вложенные круглые скобки с регулярным выражением?

    Нет модуля с именем pkg_resources

    ImportError: невозможно импортировать имя Ошибка развертывания приложения Google Popen

    В режиме emacs Python, как мне установить другую ширину автозаполнения для docstrings и кода?

    Python - лучший язык программирования в мире.