Ограничение возможностей встроенного экземпляра Python - PullRequest
1 голос
/ 05 января 2010

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

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

Ответы [ 3 ]

2 голосов
/ 05 января 2010

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

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

Что вы хотите Это проект Google Unladen Swallow , на котором работает Python-версия App Engine .

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

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

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

0 голосов
/ 05 января 2010

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

...