加载具有较低权限的程序集

时间:2009-12-14 16:46:42

标签: c# .net security assemblies trust

加载程序集的最简单方法是什么,从中实例化一个类,但是以程序集具有有限权限(沙盒)的方式执行此操作?代码不应该能够通过网络进行通信,写入文件系统或执行进程。

更新 我偶然发现了Assembly.LoadFrom(字符串assemblyFile,Evidence securityEvidence) 这可以用吗?我不确定这个证据是什么。

2 个答案:

答案 0 :(得分:3)

您需要将其加载到自己的AppDomain

这是article describing the entire process

答案 1 :(得分:1)

另一个选择,但不是100%可靠,将依赖CAS拒绝令牌。

据推测,加载类的第一个初始方法将由您控制下的代码调用,然后您可以使用Deny安全操作来阻止该方法访问.NET框架的某些部分。

代码将是这样的:

[SecurityPermission(SecurityAction.Deny, Flags = SecurityPermissionFlag.NoFlags ^ SecurityPermissionFlag.Assertion)]
void CallExternalAssemblyClass(ExternalClass c)
{
    c.SomeMethod();
}

建议的解决方案有一些注意事项,它假设您没有使用Silverlight,并且如果程序集是使用特制的CIL程序集编写的,则存在潜在的安全风险。

获得的好处是您可以避免使用单独的AppDomain以及多个AppDomain涉及的编组问题。