在shell应用程序中,我需要能够在运行时加载和执行其他.NET程序集,但不能让它们完全信任。本质上,我想限制它们(加载的程序集)接触任何系统资源(线程,网络等),唯一的例外是隔离存储。但是,来自“我”的程序集需要完全信任地执行。
我一直在考虑Code Access Security,但我不太确定这是我应该使用的。
你会怎么做?
答案 0 :(得分:8)
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);
了解应用程序域,各个区域以及分配给它们的默认权限集。 Internet是系统定义的区域/权限集中限制最多的,其中程序集仍然可以实际执行(还有Restricted区域;落入此区域的程序集无法运行)。您可以使用.NET配置工具创建权限集,并定义代码必须满足的条件(证据)才能被授予权限集。