Как я могу использовать CAS в.NET 4 для блокировки моих расширений MEF?
У меня есть приложение в.NET 4, которое использует MEF для расширяемости. Мое основное приложение состоит из трех сборок: Host
, Application
а также Contracts
,
Host
исполняемый файл "boot-strapping", который создает контейнер и создает композицию.
Application
содержит логику моего приложения и дополнительные точки расширения для третьих лиц.
Contracts
содержит интерфейсы (и некоторые вспомогательные классы), которые используются в точках расширения.
Поэтому, кто-то разрабатывает стороннее приложение, должен включить ссылку на Contracts
, но не для Application
,
Я думаю, что моя модель безопасности должна выглядеть так:
Host
а такжеApplication
должно быть SecurityCriticalContracts
должно быть SecuritySafeCritical- Все сторонние расширения должны быть SecurityTransparent
Я думаю, что 1. будет удовлетворен по умолчанию. Я знаю, что я могу реализовать 2. с атрибутом сборки. Вопрос в том, как применить правило 3.? Операционная система делает это автоматически, помечая все загруженные расширения как ненадежные? Возможно ли, чтобы загруженная сборка расширения стала полностью доверенной?
1 ответ
Если ваше приложение работает с полным доверием, то по умолчанию ваши расширения будут работать с полным доверием и смогут делать все, что захотят. Не имеет значения, какие атрибуты безопасности на них. Чтобы ограничить возможности расширений, необходимо создать домен приложения для песочницы. Вы бы установили свой Host
а также Application
как полностью доверенный этому AppDomain и всему другому коду, будут иметь только те разрешения, которые вы ему предоставите.
Вот статья MSDN на эту тему: Как выполнить частично доверенный код в песочнице