Как я могу использовать CAS в.NET 4 для блокировки моих расширений MEF?

У меня есть приложение в.NET 4, которое использует MEF для расширяемости. Мое основное приложение состоит из трех сборок: Host, Application а также Contracts,

Host исполняемый файл "boot-strapping", который создает контейнер и создает композицию.

Application содержит логику моего приложения и дополнительные точки расширения для третьих лиц.

Contracts содержит интерфейсы (и некоторые вспомогательные классы), которые используются в точках расширения.

Поэтому, кто-то разрабатывает стороннее приложение, должен включить ссылку на Contracts, но не для Application,

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

  1. Host а также Application должно быть SecurityCritical
  2. Contracts должно быть SecuritySafeCritical
  3. Все сторонние расширения должны быть SecurityTransparent

Я думаю, что 1. будет удовлетворен по умолчанию. Я знаю, что я могу реализовать 2. с атрибутом сборки. Вопрос в том, как применить правило 3.? Операционная система делает это автоматически, помечая все загруженные расширения как ненадежные? Возможно ли, чтобы загруженная сборка расширения стала полностью доверенной?

1 ответ

Решение

Если ваше приложение работает с полным доверием, то по умолчанию ваши расширения будут работать с полным доверием и смогут делать все, что захотят. Не имеет значения, какие атрибуты безопасности на них. Чтобы ограничить возможности расширений, необходимо создать домен приложения для песочницы. Вы бы установили свой Host а также Application как полностью доверенный этому AppDomain и всему другому коду, будут иметь только те разрешения, которые вы ему предоставите.

Вот статья MSDN на эту тему: Как выполнить частично доверенный код в песочнице

Другие вопросы по тегам