C # Сценарии и безопасность - PullRequest
       22

C # Сценарии и безопасность

3 голосов
/ 22 августа 2011

В моей игре (которая также написана на C #) я хочу включить некоторую поддержку настройки. Скорость очень важна, так как я планирую перенести основные части игрового процесса в сценарии. В результате я решил использовать C # для сценариев внутриигровых событий и прочего. Пользователи также должны иметь возможность писать сценарии и дополнения для игры на C #. (Я знаю, что C # НЕ является языком сценариев между прочим.)

Я предоставлю пользователям (статический) класс, который содержит все функции, необходимые для взаимодействия с игрой. Пользователи также смогут предоставить код в качестве исходного кода (в этом случае игра скомпилирует его). Скомпилировано Пользовательские "скрипты" могут / будут также передаваться другим игрокам в некоторых случаях. Например, пользователь может встроить скриптовые ловушки в своем доме или где-либо еще.

Вот мои вопросы:

  1. Безопасность

    Как я могу гарантировать, что предоставленный код будет принудительно вызывать ТОЛЬКО материал из предоставленного API (класса)? Чтобы предотвратить мошенничество со скриптами, вредоносные действия ...

    Есть ли способ запустить скомпилированный код (ы) в виде виртуальной машины или среды с низким уровнем доверия ??

  2. Скорость

    Будет ли этот подход достаточно быстрым? (Вызов функций из до 100 пользовательских сборок каждый или каждый второй кадр). Любые советы по этому поводу?

    Может быть, можно получить преимущество в скорости, скомпилировав весь пользовательский контент в одну большую сборку или что-то в этом роде?

  3. размер

    Как я могу сделать скомпилированный код небольшим по размеру (помимо сжатия)? Потому что игрокам может понадобиться загрузить десятки скриптов ...

    Есть ли способ убрать вещи, которые не являются абсолютно необходимыми? Как отладочная информация или имена классов и тому подобное ...

Компиляция во время выполнения является довольно новой для меня (вот почему я спрашиваю здесь). Поэтому было бы неплохо указать на некоторые серьезные ошибки новичка и / или проблемы безопасности.

Edit:

Только для уточнения: Пользовательский плагин / скрипт или все, что вы хотели бы назвать, будет классом (также написанным на C #), который должен реализовывать определенные функции, такие как «GetAddonInfo», «Init», «Update» ... Так же, как обычный класс C #, полученный из моего абстрактного класса «Addon».

Ответы [ 2 ]

5 голосов
/ 22 августа 2011

Вы хотите взглянуть на эту переделку старого примера проекта Microsoft

http://terrarium2.codeplex.com/

Он в основном делает все, что вы хотите.

Компилирует код в DLLи запускает их в environemnt

Проверяет наличие разрешенных вызовов API.

и т. д.

Версия 2 была переписана для использования веб-служб и ряда других функций,Судя по твоему вопросу, похоже, тебя больше интересует Terrarium 1. Однако я не могу отследить его, поэтому тебе, возможно, придется «согласиться» на более сложную версию 2.0.

3 голосов
/ 22 августа 2011

Посмотрите на MEF и MAF - они обе являются фреймворками, разработанными для добавления сценариев C # и VB в существующие приложения.Вы можете создать домен приложения для своих сценариев, а затем использовать защиту доступа к коду, чтобы строго ограничить возможности этих сценариев.

Этот вопрос может помочь.

Выбор между MEF и MAF (Система.AddIn)

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