ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

委派安全在不同的 .NET Framework 版本之间是有区别的。本文描述了不同的委派行为以及相关的安全考虑。

在 .NET Framework 1.0 与 1.1 中

.NET Fremawork 1.0 与 1.1 根据一个委派创建者与一个委派调用者来完成下列安全行为。

  • 在一个委派被创建的时候,可以根据委派创建者的批准集来完成委派目标方法的安全连接要求。并且在失败的情况下还会确保安全动作导致一个 SecurityException 异常。
  • 在委派被调用的时候,委派调用者的任何现有的安全要求都将被完成。

只要你的代码从几乎不被信任的代码(可能会被调用)中获取了委派,那么就需要确保你没有允许这些代码来升级它们的许可。如果你获取了一个委派并且准备稍后再使用,那么被创建的委派代码就不会存在于调用堆栈中并且如果委派代码还尝试一个被保护的操作,那么它的许可也将不会被测试。如果你的代码与调用者代码拥有比创建者更高的特权,那么创建者能够谱写出针对于非调用堆栈组成部分的调用路径。

要解决这个问题,你需要限制你的调用者(例如,通过请求一个许可)或者约束委派的执行许可(例如,通过使用 Deny 或者 PermitOnly 堆栈重载)。

在 .NET Framework 2.0 与以后的版本中

与前面的版本所不同的是,.NET Framework 2.0 会在委派被创建并且被调用的时候根据委派创建者来完成安全动作。

  • 在一个委派被创建的时候,委派目标方法的安全连接要求会根据委派创建者的批准集而被完成。并且在失败的情况下还会确保安全运作导致一个 SecurityException 异常。
  • 委派创建者的批准集会在委派被创建的时候以及与委派一起被存储的时候同样也能够被捕获。
  • 如果委派创建者与委派调用者均属于不同的汇编集,那么在委派被调用的时候,就会首先根据当前环境的要求来评估委派创建者的被捕获批准集。其次才是被完成的委派调用者的任何现有安全要求。
posted on 2007-02-08 12:38  Laeb  阅读(318)  评论(0编辑  收藏  举报