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