ASP.NET Lab

The Best Web, The Best Future

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

一些方法可能没有适当地允许调用任何非可信任的代码。这种方法能够引起几个隐患:方法有可能提供一些受限制的信息;也可能相信任何被传递给它的信息;甚至还可能不会对参数进行错误检查;或者持有错误的参数,因此会导致一些故障或者伤害。所以,你应该了解到这些情况并且采取相应的措施来保护这些方法。

在有些情况下,你可能需要限制那些不打算公开使用但是又必须公开的方法。例如,你可能有一个需要跨越属于你的 DLL 并且因此而必须公开被调用的接口,但是你不需要公开暴露它来防止用户的使用或者防止恶意代码来利用你的组件入口点。不打算公开使用限制方法(但是又必须是公开的)的另外一种公共原因就是避免为非常内部的接口而提供文档与支持。

被管理的代码提供了几种方式来限制方法访问:

  • 限制类与汇编集,或者派生类的可访问性作用范围,如果它们是能够被信任的。这是限制方法访问的最简单方式。注意:通常,派生类的可信任度能够小于它们的基类,虽然在有些情况下它们能够共享父类的身份。尤其是,不要从被保护的关键字中对信任度进行推断,因为这在安全环境中并不是必需要被使用的。
  • 限制对于被指定的本质特性以及任何你所选择的特殊依据(强名称、发布器、区域,等等)的调用者的方法访问。
  • 限制对于持有你所选择的许可的调用者的方法访问。

类似地,安全声明允许你控制类的继承。因此你可以使用 InheritanceDemand 来做下列事情:

  • 需要派生类持有一个被指定的身份或者许可。
  • 需要重载特殊方法来持有被指定的身份或者许可的派生类。

下列范例说明了如何保护一个限制调用者(通过需要特定的强命名而被标记的)访问的公开的类。这个范例以 Demand 作为强命名来使用 StrongNameIdentityPermissionAttribute。关于如何使用一个强命名来标记汇编集的基于任务的信息,请参考:[创建并且使用被强命名的汇编集]。

Visual Basic
<StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey := "…hex…", Name := "App1", Version := "0.0.0.0")>  _
Public Class Class1
End Class
C#
[StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey="…hex…", Name="App1", Version="0.0.0.0")]
public class Class1
{

}
posted on 2007-02-07 13:13  Laeb  阅读(392)  评论(0编辑  收藏  举报