在創建代碼組的過程中,簡要熟悉了代碼組的成員條件,在安全策略的實施過程中,可以認為,所有符合該代碼組成員條件的程序集都屬於該代碼組。成員條件的實現形式是類型,每種成員條件對應一種類型。
所有代碼
“所有代碼”表示匹配所有代碼的成員條件,該成員條件的實現類是AllMembershipCondition類。該成員條件通常用於策略級別的根代碼組,以便將該策略應用於所有代碼。AllMembershipCondition的類定義如代碼清單4-6所示。
代碼清單2-1 AllMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed classAllMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
AllMembershipCondition類繼承了三個接口:
IMembershipCondition接口:定義測試以確定代碼程序集是否是代碼組的成員。該接口的Check方法用來確定指定的證據是否能滿足成員條件。
ISecurityEncodable接口:定義使權限對象狀態與 XML 元素表示形式進行相互轉換的方法。任何自定義權限都必須實現此接口。該接口的FromXml方法用 XML 編碼重新構造具有指定狀態的安全對象,ToXml方法創建安全對象及其當前狀態的 XML 編碼。
ISecurityPolicyEncodable接口:支持使權限對象狀態與 XML 元素表示形式進行相互轉換的方法。該接口與 ISecurityEncodable接口相似,不同的是它包含策略級上下文,解析對命名權限集的引用時需要策略級上下文信息。ISecurityPolicyEncodable接口也提供了FromXml和ToXml方法,功能與ISecurityEncodable接口相同。
應用程序目錄
“應用程序目錄”成員條件通過測試程序集的應用程序目錄確定該程序集是否屬於代碼組。該成員條件的實現類是ApplicationDirectoryMembershipCondition 類,該類定義如代碼清單2-2所示。
代碼清單2-2 ApplicationDirectoryMembershipCondition 類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class ApplicationDirectoryMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
ApplicationDirectoryMembershipCondition可確定 ApplicationDirectory 屬性是否包含程序集 URL 證據路徑。例如,如果 ApplicationDirectory 是 C:\app1,則具有 URL 證據的程序集(例如 C:\app1、C:\app1\main.aspx、C:\app1\folder1 或 C:\app1\folder1\main1.aspx)符合該成員條件。不在 C:\app1 目錄中或其子目錄之一中的代碼未能通過成員條件測試。沒有 ApplicationDirectory 或 URL 證據的代碼總是不能通過成員條件測試。
哈希
“哈希”成員條件通過測試程序集的哈希值確定該程序集是否屬於代碼組。該成員條件的實現類是HashMembershipCondition類,該類的定義如代碼清單4-8所示。
代碼清單2-3 HashMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed classHashMembershipCondition : ISerializable, IDeserializationCallback, IMembershipCondition,
ISecurityEncodable, ISecurityPolicyEncodable
HashMembershipCondition類比AllMembershipCondition類多實現了兩個接口:
ISerializable接口:允許對象控制其自己的序列化和反序列化過程。
IDeserializationCallback接口:指示在完成整個對象的反序列化時的通知類。
發行者
“發行者”成員條件通過測試程序集的軟件發行者 Authenticode X.509v3 證書確定程序集是否屬於代碼組。該成員條件的實現類是PublisherMembershipCondition類,該類的定義如代碼清單2-3所示。
代碼清單2-3 PublisherMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class PublisherMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
PublisherMembershipCondition類有一個名為Certificate的公共屬性,用類獲取或設置要針對其測試成員條件的 Authenticode X.509v3 證書。
站點
“站點”成員條件通過測試從其中產生程序集的站點以確定該程序集是否屬於代碼組,其中代碼可出自 HTTP 站點、HTTPS 站點和 FTP 站點。該成員條件的實現類為SiteMembershipCondition類,該類的定義如代碼清單2-4所示。
代碼清單2-4 SiteMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class SiteMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
如果該代碼源於由 Site 指定的網站,則代碼程序集滿足站點成員條件。站點是位於 URL 協議標識符後面的“//”和後面的“/”(如果存在)之間的字符串。例如,www.xuanhun.com 是 URL http://www.xuanhun.com/process/grind.htm 的站點標識,這不包括端口號。如果給定的 URL 是 http://www.xuanhun.com:8000/,則站點為 www.xuanhun.com,而非 www.fourthcoffee.com:8000。
站點可以完全匹配,也可以通過在點分隔符位置使用通配符(“*”)前綴進行匹配。例如,站點名稱 *.xuanhun.com 與 xuanhun.com 和 www.xuanhun.com 匹配。如果沒有通配符,則站點名稱必須是精確匹配。站點名稱 * 將與所有站點匹配,但不會與無站點證據的代碼匹配。
強名稱
“強名稱”成員條件通過測試程序集的強名稱確定該程序集是否屬於代碼組。該成員條件的實現類為StrongNameMembershipCondition類,該類的定義如代碼清單2-5所示。
代碼清單2-5 StrongNameMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StrongNameMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
強名稱非常適合於指定你給予了大量的、非常大權限的代碼程序集。由於強名稱以加密方式驗證,所以,攻擊者無法模擬合法的程序集和使用它們的權限。
該類提供了三個屬性:
Name屬性用來獲取或設置要針對其測試成員條件的 StrongName 的簡單名稱。
PublicKey屬性用來獲取或設置要針對其測試成員條件的 StrongName 的 StrongNamePublicKeyBlob。
Version屬性用來獲取或設置要針對其測試成員條件的 StrongName 的 Version。
URL
“URL”成員條件通過測試程序集的URL確定該程序集是否屬於代碼組。該成員條件的實現類是UrlMembershipCondition類,該類的定義如代碼清單2-6所示。
代碼清單2-6 UrlMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed classUrlMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
可以使用完整的 URL作為條件,包括協議(HTTP、HTTPS、FTP)和文件。例如,http://www.fourthcoffee.com/process/grind.htm 就是一個完整的 URL。
也可在最後一個位置使用通配符來匹配。例如,http://www.fourthcoffee.com/process/* 就是一個含通配符的 URL。
UrlMembershipCondition類含有一個公共屬性Url用來獲取或設置要針對其測試成員條件的 URL。
區域
“區域”成員條件通過測試程序集的原始區域確定該程序集是否屬於代碼組。該成員條件的實現類為ZoneMembershipCondition類,該類的定義如代碼清單2-7所示。
代碼清單2-7 ZoneMembershipCondition類定義
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed classZoneMembershipCondition : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable
ZoneMembershipCondition類只能在源於特定區域的 .NET 程序集和 Web 服務中使用。例如MyComputer、Intranet 和Internet這些區域。
通過代碼訪問安全策略工具來更改代碼組成員條件的方法如下:
caspol -chggroup 1.2.1. -zone Internet
其中,使用chggroup命令更改標簽為1.2.1的代碼組的區域為Internet。
仍然可以使用.NET Framework配置工具來修改代碼組的成員條件。
作者:玄魂
出處:http://www.cnblogs.com/xuanhun/
查看本欄目