2009-02-08 4 views
5

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

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

+0

Для того, что это выглядит, кажется, пока вы создаете pid-создание, rexec безопасен. – user2284570

ответ

4

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

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

+0

Предоставление собственного __import__ - отличная идея и намного лучше, чем любое другое решение, когда-либо сделанное для песочницы! – kylebrooks

+0

@kylebrooks: «гораздо лучше, чем любое другое решение» - это немного строка. Он позволяет использовать белые списки (и черные списки), но это не мешает или даже не обнаруживает процесс, который пытается «злоупотреблять ресурсами ввода-вывода или процессора/памяти». –

+0

Вы можете использовать только белый список или черный список этих модулей, если у вас нет доступа к объектам, которые содержат ссылки на них (или c-расширение, полностью обходящее модули уровня python). Отсутствие инкапсуляции в python, по-видимому, является самой большой проблемой безопасности. – DylanYoung

2

в CPython «песочница» по соображениям безопасности является: «не делает, что у ваших детей компаний» -thing.

попробовать:

  • Jython с Java "песочницу"
  • PyPy -> см Ответ С. Лотт
  • может быть IronPython имеет решение?

см Warning:

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

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

+0

Кажется, что все эти дыры в безопасности требуют создания потока или процесса. Поэтому rexec безопасен, если создание pid является ulimit. – user2284570

0

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

Это эквивалентно использованию «jython с java» песочницей », согласно the answer above, но, вероятно, немного сложнее настроить.

Смежные вопросы