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