Есть ли альтернатива rexec для песочницы Python?

Реализация среды "песочницы" в Python обычно выполнялась с помощью модуля rexec ( http://docs.python.org/library/rexec.html). К сожалению, он устарел / удален из-за некоторых уязвимостей безопасности. Есть ли альтернатива?

Моя цель состоит в том, чтобы код Python выполнял полустоверные сценарии Python. В идеальном мире вызовы любых функций вне предопределенного набора вызовут исключения. Из того, что я читал об устаревании rexec, это может быть невозможно. Так что я согласен на столько, сколько смогу получить. Я могу запустить отдельный процесс для запуска сценариев, что очень помогает. Но они все еще могут злоупотреблять ресурсами ввода-вывода или процессора / памяти.

3 ответа

Решение

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

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

В cpython "песочница" по соображениям безопасности - это: "не делайте этого в вашей компании, дети" - все.

пытаться:

  • Jython с Java "песочница"
  • pypy -> см. ответ С.Лотт
  • может у Ironpython есть решение?

см. Предупреждение:

Предупреждение

В Python 2.3 эти модули были отключены из-за различных известных и не легко исправляемых дыр в безопасности. Модули все еще задокументированы здесь, чтобы помочь в чтении старого кода, который использует модули rexec и Bastion.

Лучшим выбором для обеспечения безопасности в cPython является использование механизмов песочницы на уровне ОС и запуск ненадежного кода в отдельном процессе, ограниченном ОС.

Это эквивалентно использованию 'jython with java "sandboxing", как указано в ответе выше, но, вероятно, немного сложнее в настройке.

Другие вопросы по тегам