同樣,聲明性安全也允許您控制類的繼承。您可以使用 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 版安全更改文檔。
•
文章來源于領測軟件測試網 http://www.kjueaiud.com/