WEB开发网
开发学院软件开发VC Security Briefs...小心完全信任的代码 阅读

Security Briefs...小心完全信任的代码

 2006-07-20 11:40:01 来源:WEB开发网   
核心提示: 结果是所有的需求都成功,即便是先前所示的链接需求(link demand),Security Briefs...小心完全信任的代码(4),第二个例子也示范了另一个非常危险的代码存取许可,即一个称为 ControlPolicy 的 SecurityPermission,但是,如果安全策略给予

结果是所有的需求都成功,即便是先前所示的链接需求(link demand)。第二个例子也示范了另一个非常危险的代码存取许可,即一个称为 ControlPolicy 的 SecurityPermission。任何获取了该许可的代码都可以仅用一行代码来关闭进程的代码存取安全。完全信任代码具备所有许可,包括这一个。

但是,你也许不想落到这个地步,实际上你也不会如此。只要用需要的公共密钥延迟签署(delay-sign)程序集并关闭此密钥的强名称检查。具体详细参见我在 MSDN 上发表的有关强名称的文章:Security Briefs: Strong Names and Security in the .NET Framework。以我对 CLR 的研究,微软在类似 MSCORLIB.DLL 的核心框架库中使用强名称 LinkDemand,但它决不会阻止我调用其中的私有方法。

我希望我已经清晰地做了表达:给某人一个程序集,并限制他调用某些方法或存取某些变量是不可能的。 当然,除非你控制了运行你的代码的这台机器,这种情况下,你可以强制他们在部分信任环境下运行。在完全信任环境下,许多安全保证都将消失。

IStackWalk.Deny 有屏障作用吗?

很少有人知道通过使用 deny 修饰符可以限制调用堆栈许可:

using System.Security;
using System.Security.Permissions;
class WellMeaningCode {
  public void CallPlugIn(EvilCode plugin) {
    // put a CAS modifier on the stack that denies all file system access
    new FileIOPermission(
      PermissionState.Unrestricted).Deny();
    plugin.DoWork();
    CodeAccessPermission.RevertDeny();
  }
}

其思路是即便 WellMeaningCode 可能为完全信任,也不能信任插件或某些第三方扩展。所以,在对插件 进行调用前,要临时降低许可。但是,如果安全策略给予插件完全信任的话,方能阻止天真的程序员所创建的可怕插件代码。下面是针对这种情况的实现代码:

上一页  1 2 3 4 5 6 7  下一页

Tags:Security Briefs 小心

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接