Встроенная защита IronPython

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

Наличие случайных сценариев, особенно если они загружены из Интернета, возможность открывать интернет-соединения, получать доступ к жесткому диску пользователя или изменять внутреннее состояние игры — это очень плохо.

Обычно люди просто предлагают: «Использовать отдельный AppDomain». Однако, если я не ошибаюсь, кросс-домены работают медленно. Очень медленно. Слишком медленно для игрового движка. Поэтому ищу альтернативы.

Я подумал о том, чтобы скомпилировать пользовательскую версию IronPython, которая не позволяла бы вам импортировать clr или любое пространство имен, тем самым ограничивая его стандартной библиотекой.

Вариант, который я предпочел бы, выглядит следующим образом:

__builtins__.__import__ = None #Stops imports working
reload = None #Stops reloading working (specifically stops them reloading builtins
          #giving back an unbroken __import___!

Я читал это в другом посте о переполнении стека. Предположим, что вместо установки __ builtins_ . _ import__ в none, вместо этого я установил пользовательскую функцию, которая позволяет загружать стандартный API.

Вопрос заключается в том, сможет ли сценарий, используя описанный выше метод, получить доступ к модулю clr, файлу .net BCL или что-то еще, что потенциально может причинить вред? Или я должен пойти с изменением источника? Третий вариант?

5
задан Programmdude 27 May 2012 в 17:04
поделиться