ASP.NET Lab

The Best Web, The Best Future

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

连接要求的一种特殊的保护情况在安全机制中被加强,但是它在你的代码中仍然可能是一个弱点来源。

如果完全被信任的代码调用了一个属性、事件,或者通过一个 LinkDemand 而被保护的方法,如果对于调用者的 LinkDemand 许可检查是感到满意的,那么调用就会取得成功。另外,如果完全被信任的代码暴露了一个获取属性名称并且使用反射来调用它的 get 访问器的类,那么对于 get 访问器的调用就会取得成功,尽管用户代码并没有访问这个属性的权利。这是因为 LinkDemand 只检查直接的调用者,也就是完全被信任的代码。从本质上来说,完全被信任的代码在没有确认用户代码拥有调用权利的情况下会代表用户代码来产生一个特权调用。

为了防止出现这样的安全漏洞,公共语言运行时会通过 LinkDemand 在对于方法、构造器、属性,或者被保护的事件的一个间接调用中来扩展完整堆栈通道要求中的检查。但是这个保护会导致一些性能代价并且会改变语义上的安全检查;并且在更快的一级检查将要被通过的时候,对于完整堆栈通道的要求就有可能会失败。

posted on 2007-02-09 15:17  Laeb  阅读(188)  评论(0编辑  收藏  举报