2010-01-05 3 views
1

Есть ли способ ограничить возможности скриптов python, работающих под встроенным интерпретатором? В частности, я хочу, чтобы сценарии не делали такие вещи, как:Ограничение возможностей встроенного экземпляра python

  • Импорт модулей расширения python (то есть .pyd модулей), за исключением тех, которые разрешены приложением.
  • Управление процессами любым способом (т.е. запуск новых процессов или завершение приложения).
  • Любые виды сетей.
  • Управление файловой системой (например, создание, изменение и удаление файлов).
+0

Есть http://pypi.python.org/pypi/RestrictedPython/ вариант? – diciu

ответ

2

Нет. Нет простого способа предотвратить это на CPython. Ваши варианты:

  1. Редактируйте исходный код CPython и удалите ненужные вещи - дайте нам глупые методы для всех этих вещей. Очень подвержен ошибкам и сложно сделать. Это подход Google App Engine.
  2. Использование Restricted Python. Однако с его помощью вы не можете помешать вашему пользователю исчерпать доступную память или запустить бесконечные циклы «съедайте все-cpu».
  3. Используйте другую реализацию python. PyPy имеет sandbox mode, который вы можете использовать. Jython работает под java, и я думаю, что Java может быть изолирован.
+0

Ну, я не должен беспокоиться о том, что скрипты сбой/замораживание приложения больше, когда враждебный плагин говорит, что загружает и выполняет файл из Интернета, меняет системные настройки и т. Д. Я думаю, я мог бы редактировать реализацию CPython, для некоторых вещей, я думаю, что просто не компиляция модуля для начала будет подходящей, и если я предполагаю, что могу подключить загрузчик модуля, чтобы проверить белый список безопасных модулей pyd. Есть ли какая-либо информация вокруг где-то простое удаление модулей/объектов из компиляции python? –

0

Возможно, this может быть полезным. У вас есть пример того, как работать с астроном.

+0

«ACCESS DENIED», я действительно ненавижу интернет-ограничения в колледжах ... проверит это позже, когда вернусь домой. –

0

Что вы хотите, это проект Google Unladen Swallow, который запускается на Python версии App Engine.

Модули строго ограничены, ctypes не разрешены, сокеты сопоставлены с какой-либо политикой или другими, другими словами, вы получаете изолированную версию Python в соответствии со своим предложением Java.

Я хотел бы указать, что это делает систему почти бесполезной. Хорошо бесполезно для чего-нибудь более холодного, чем еще одно приложение App Engine. Забудьте о системных модулях для обезьян, и даже доступ к собственному стеку ограничен. Полностью нединамичный.

OT: игры обычно вставляют LUA для скриптинга, возможно, вам стоит его проверить.

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