Есть ли альтернатива rexec для песочницы Python? - PullRequest
6 голосов
/ 08 февраля 2009

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

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

Ответы [ 3 ]

4 голосов
/ 08 февраля 2009

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

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

2 голосов
/ 08 февраля 2009

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

Попробуйте:

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

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

Внимание

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

1 голос
/ 08 декабря 2017

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

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

...