Security Briefs...小心完全信任的代码
2006-07-20 11:40:01 来源:WEB开发网核心提示: class EvilCodeWithFullTrust {void DoWork() {new PermissionSet(PermissionState.Unrestricted).Assert();// happily access the file system// regardle
class EvilCodeWithFullTrust {
void DoWork() {
new PermissionSet(
PermissionState.Unrestricted).Assert();
// happily access the file system
// regardless of the caller''s deny!
}
}
完全信任代码非常难以信任的!Assert 是令一个堆栈修饰符,它能有效地取消 Deny 限制。但是什么样地代码被允许 Assert 呢?任何被准许 SecurityPermission 的代码调用 Assertion。当然,它包含所有完全信任代码。所以如果程序集 B 已被准许 FullTrust,那么在程序集 A 中尝试使用 Deny 来约束程序集 B 是毫无意义的。为了让 Deny 起作用,以部分信任来运行。
幕间休息:AppDomain 安全策略
如果你熟悉 .NET Framework Configuration Tool,你大概已经注意到有三个安全策略等级:企业级、机器级和用户级。实际上,还有 第四种级别安全策略,它对我上面所提到的类似插件这种动态沙箱代码十分有用。由于篇幅所限,我不能很深入地讨论这个 主题,如果你以前从未涉及此领域,只能在此点到为止。
第四种级别与 AppDomain 有关,在默认情况下,它外加对由企业级、机器级 和用户级发布的许可集进行限制。但是,如果你想对代码段进行沙箱处理,比如可能是安装在本地机器上的某个插件,它可能通过创建第二个 AppDomain 并调用 AppDomain.SetAppDomainPolicy 来实现。策略本身可以通过 SecurityManager.LoadPolicyLevelFromFile 从文件加载。如果你觉得可能使用这个技术,有关这方面目前我所知道的最好的参考资料是 Brian LaMacchia,Sebastian Lange 以及微软的几个家伙所写的一本书:《.NET Framework Security》(Addison-Wesley, 2002)。特别是第十章。
[]
更多精彩
赞助商链接