.NET/Security: ограничение доступа загружаемых во время выполнения сборок к определенным API.

В приложении оболочки мне нужно иметь возможность загружать и выполнять другие сборки .NET во время выполнения, но без предоставления им полного доверия. По сути, я хочу ограничить их (загруженные сборки) от прикосновения к любым системным ресурсам (поточность, сеть и т. д.), за исключением изолированного хранилища. Однако сборки от «меня» должны выполняться с полным доверием.

Я рассматривал Code Access Security, но я не совсем уверен, что мне следует его использовать.

Как бы вы это сделали?


person Community    schedule 27.09.2010    source источник


Ответы (1)


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

var myEvidence = new Evidence(new object[] {SecurityZone.Internet});
var newDomain = AppDomain.CreateDomain("InternetDomain");
myDomain.Load("MyUntrustedAssembly.dll", myEvidence);
myDomain.CreateInstanceAndUnwrap("MyUntrustedAssembly","MyUntrustedObjectType");

//do your work with the untrusted assembly/type

AppDomain.Unload(myDomain);

Ознакомьтесь с доменами приложений, различными зонами и назначенными им наборами разрешений по умолчанию. Интернет является наиболее ограничивающим из системных зон/наборов разрешений, доступных, в которых сборки могут фактически выполняться (есть также зона Restricted; сборки, попадающие в эту зону, не могут выполняться). Вы можете использовать средство настройки .NET для создания наборов разрешений и определения условий (доказательств), которым должен удовлетворять код, чтобы получить набор разрешений.

person KeithS    schedule 27.09.2010
comment
Спасибо за предложение! Одна вещь: сборки должны выполнять пользовательский интерфейс WPF. Забыл упомянуть об этом ранее. Однако я сомневаюсь, что это возможно в такой запретной зоне. - person ; 28.09.2010
comment
Интернет-зона по-прежнему имеет доступ к потоку пользовательского интерфейса; работающие там сборки могут создавать и отображать окна. Я не знаю, есть ли у вас доступ к аппаратному ускорению графики, и вы определенно не можете использовать GDI+ для работы с неуправляемыми окнами. - person KeithS; 28.09.2010