同样,声明性安全也允许您控制类的继承。您可以使用 InheritanceDemand 执行以下操作:
•要求派生类拥有指定的标识或权限。
•要求重写特定方法的派生类拥有指定的标识或权限。
示例:保护对类或方法的访问以下示例显示了如何确保公共方法的安全,以限制访问。
•sn -k 命令用于创建新的私钥/公钥对。私钥部分需要使用强名称签署代码,并由代码发行者安全地保留。(如果泄露,任何人都可以在他们的代码上假冒您的签名,从而使保护措施失效。)
通过强名称标识来确保方法的安全
sn -k keypair.dat csc/r:App1.dll /a.keyfile:keypair.dat App1.cs sn -p keypair.dat public.dat sn -tp public.dat >publichex.txt [StrongNameIdentityPermissionAttribute (SecurityAction.LinkDemand, PublicKey="_",hex_",Name="App1", Version="0.0.0.0")] public class Class1 •csc 命令用于编译和签署 App1,以授于它访问受保护方法的权限。
•后面的两个 sn 命令用于从密钥对中提取公钥部分,并将它格式化为十六进制。
•示例的下半部分是摘录的受保护方法的源代码。自定义属性可定义强名称,指定密钥对中的公钥,并插入从 sn 得到的十六进制格式的数据作为 PublicKey 属性。
•在运行时,由于 App1 拥有必需的强名称签名,所以被允许使用 Class1。
该示例使用 LinkDemand 来保护 API 元素;有关使用 LinkDemand 的限制的重要信息,请参阅本文后面的部分。
防止不受信任的代码使用类和方法使用以下声明可以防止部分信任的代码使用类和方法(包括属性和事件)。通过将这些声明应用于类,可以对该类的所有方法、属性和事件应用保护;但请注意,字段访问不会受到声明性安全的影响。请注意,链接请求只保护直接调用方,并且仍可能会受到引诱攻击(本文的基于证据的安全性和代码访问安全性部分对此进行了描述)。
具有强名称的程序集将声明性安全应用于所有可公开访问的方法、属性和事件,因此只有完全受信任的调用方才能使用它们,除非程序集通过应用 AllowPartiallyTrustedCallers 属性显式地决定参与使用。因此,通过显式地标记类来排除不受信任的调用方,只对未签名的程序集或具有该属性的程序集、以及原本就不打算用于不受信任调用方的类型的子集才是必需的。有关全部详细信息,请参阅 Microsoft .NET 框架的第 1 版安全更改文档。
•
文章来源于领测软件测试网 https://www.ltesting.net/