1

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

更新 我刚刚偶然发现 Assembly.LoadFrom(string assemblyFile, Evidence securityEvidence) 这可以使用吗?不确定我在这个证据下的事情。

4

2 回答 2

3

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

这是一篇描述整个过程的文章。

于 2009-12-14T16:49:43.183 回答
1

另一种选择,但不是 100% 可靠,是依赖调用堆栈上的 CAS 拒绝令牌。

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

代码将是这样的:

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

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

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

于 2009-12-15T19:22:46.483 回答