Есть ли альтернатива 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", как указано в ответе выше, но, вероятно, немного сложнее в настройке.