.NET / Security:限制运行时加载的程序集访问某些API

在shell应用程序中,我需要能够在运行时加载和执行其他.NET程序集,但不能给予它们完全的信任。 本质上,我想限制它们(加载的程序集)接触任何系统资源(线程,网络等),唯一的例外是隔离存储。 但是,来自“我”的程序集需要以完全信任的方式执行。

我一直在考虑代码访问安全性,但我不太确定这是我应该使用的。

你会怎么做?

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配置工具创建权限集,并定义代码必须满足的条件(证据)才能授予权限集。