Моддинг Python - предотвращение импорта опасных скриптов? - PullRequest
4 голосов
/ 17 марта 2012

Я хочу позволить пользователям создавать свои собственные "моды" Python для моей игры, помещая их скрипты в специальную папку, которую игра "сканирует" для модулей Python и импортирует.Какой самый простой способ предотвратить импорт «опасных» скриптов?Я не хочу, чтобы люди жаловались мне на то, что они использовали чей-то мод, и он стер их жесткий диск.Вещи, которые я хотел бы ограничить, - это доступ / изменение / создание любых файлов вне их папки и подключение к Интернету / загрузка / отправка данных.Если вы можете что-то еще, дайте мне знать.

Так как это можно сделать?

Ответы [ 4 ]

2 голосов
/ 19 марта 2012

Ограниченный Python, похоже, способен ограничивать функциональность кода в чистом виде и совместим с Python до 2.7.

http://pypi.python.org/pypi/RestrictedPython/

, например

Предоставляя другой словарь __builtins__, мы можем исключить небезопасные операции, такие как открытие файлов [...]

0 голосов
/ 17 марта 2012

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

В cPython есть ядро ​​безопасного исполнения. Основная идея состоит в том, чтобы заменить глобальный __builtins__ ( Примечание: , а не модуль __builtin__), который информирует Python о включении некоторых функций безопасности; сделать несколько атрибутов для некоторых объектов недоступными и удалить большинство объектов реализации из интерпретатора при эваляции этого бита кода.

Затем вам нужно будет написать реальную реализацию; таким образом, что защищенные модули не просочились в песочницу. Достаточно проверенная «файловая» замена предоставлена ​​ в связанном блоге. Взгляд на это может дать вам представление о том, насколько сложной и сложной является эта проблема.


Итак, теперь, когда вы поняли, что это вызов в python; вам следует взглянуть на языки с песочницей в качестве основной функции, например Lua , которая очень популярна в играх.

0 голосов
/ 17 марта 2012

Предоставление им выполнения Python и попытка ограничить то, что они делают, вызывает проблемы. См. этот SO вопрос для обсуждения и указателя на хорошую статью. (Вы, вероятно, отключите «eval», но на практике это не будет иметь большого значения.

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

0 голосов
/ 17 марта 2012

Очевидный способ сделать это - загрузить модуль в виде строки и exec. Это имеет столько же угроз безопасности, но может быть легче заблокировать с помощью пользовательских globals и locals. Взгляните на этот вопрос - он дает действительно хорошее руководство по этому вопросу. Как указано в комментариях Делнана, это не совсем безопасно.

Вы также можете попробовать это . Я не использовал его, но, похоже, он обеспечивает безопасную среду для небезопасных сценариев.

...