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

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

Я думал о безопасности доступа к коду, но я не совсем уверен, что это то, что я должен использовать.

Как бы вы поступили об этом?

1 Ответ

8 голосов
/ 28 сентября 2010

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);

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

...