加载程序集的最简单方法是什么,从中实例化一个类,但是以程序集具有有限权限(沙盒)的方式执行此操作?代码不应该能够通过网络进行通信,写入文件系统或执行进程。
更新 我偶然发现了Assembly.LoadFrom(字符串assemblyFile,Evidence securityEvidence) 这可以用吗?我不确定这个证据是什么。
答案 0 :(得分:3)
您需要将其加载到自己的AppDomain。
答案 1 :(得分:1)
另一个选择,但不是100%可靠,将依赖CAS拒绝令牌。
据推测,加载类的第一个初始方法将由您控制下的代码调用,然后您可以使用Deny安全操作来阻止该方法访问.NET框架的某些部分。
代码将是这样的:
[SecurityPermission(SecurityAction.Deny, Flags = SecurityPermissionFlag.NoFlags ^ SecurityPermissionFlag.Assertion)]
void CallExternalAssemblyClass(ExternalClass c)
{
c.SomeMethod();
}
建议的解决方案有一些注意事项,它假设您没有使用Silverlight,并且如果程序集是使用特制的CIL程序集编写的,则存在潜在的安全风险。
获得的好处是您可以避免使用单独的AppDomain以及多个AppDomain涉及的编组问题。