HOW TO:使用 XmlSecureResolver 類別
更新: November 2007
XmlSecureResolver 類別可以協助保護另一 XmlResolver 物件,其方法為包裝該 XmlResolver 物件,並限制基礎 XmlResolver 可以存取的資源。例如,XmlSecureResolver 類別可以禁止存取特定的網際網路站台或區域。
使用 URL 限制存取
建立 XmlSecureResolver 物件,僅允許它存取本機的內部網路站台。
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
透過使用權限集合限制存取
建立 WebPermission 物件。
Dim myWebPermission As New WebPermission(PermissionState.None)
WebPermission myWebPermission = new WebPermission(PermissionState.None);
僅允許存取下列兩個 URL。
myWebPermission.AddPermission(NetworkAccess.Connect, "https://www.contoso.com/") myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
myWebPermission.AddPermission(NetworkAccess.Connect,"https://www.contoso.com/"); myWebPermission.AddPermission(NetworkAccess.Connect,"http://litwareinc.com/data/");
將 Web 使用權限加入至 PermissionSet 物件。
Dim myPermissions As New PermissionSet(PermissionState.None) myPermissions.AddPermission(myWebPermission)
PermissionSet myPermissions = new PermissionSet(PermissionState.None); myPermissions.AddPermission(myWebPermission);
利用使用權限集合建立 XmlSecureResolver 物件。
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
使用辨識項限制存取
您可以使用 Evidence 限制存取。Evidence 可用於建立 PermissionSet,其會套用至基礎 XmlResolver。在開啟任何資源之前,XmlSecureResolver 都會呼叫已建立之 PermissionSet 上的 PermitOnly。
下列清單彙總了部分可能案例及要為每個案例提供的辨識項型別。
在完全信任的環境中工作:
請使用組件建立辨識項。
Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence Dim myResolver As XmlSecureResolver myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
Evidence myEvidence = this.GetType().Assembly.Evidence; XmlSecureResolver myResolver; myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
在非完全信任的環境中工作並具有來自外部來源的程式碼或資料。已知外部來源的源頭且有可驗證的 URI:
請使用 URI 建立辨識項。
Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI) Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI); XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
在非完全信任的環境中工作並具有來自外部來源的程式碼或資料,但尚不瞭解外部來源的源頭:
將 evidence 參數設定為 null。這可以拒絕對資源的任何存取。
- 或 -
如果應用程式需要資源的某些存取權,請要求呼叫端的辨識項。
使用 XmlSecureResolver 解析 XML 資源
XmlUrlResolver 類別是 System.Xml 命名空間中所有類別的預設解析程式。它還可以用來載入 XML 文件、解析外部資源 (如實體、DTD 或結構描述) 及匯入或併入指示詞。
藉由指定要使用的 XmlResolver 物件,可以覆寫此項。藉由指定 XmlSecureResolver,可以限制基礎 XmlResolver 可存取的資源。
建立使用 XmlSecureResolver 的 XmlReader 物件
建立具有正確使用權限集合的 XmlSecureResolver 物件。
建立使用 XmlSecureResolver 物件的 XmlReaderSettings 物件。
Dim settings As New XmlReaderSettings() settings.XmlResolver = myResolver
XmlReaderSettings settings = new XmlReaderSettings(); settings.XmlResolver = myResolver;
使用 XmlReaderSettings 物件建立 XmlReader 物件。
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReader reader = XmlReader.Create("books.xml", settings);
使用 XmlSecureResolver 載入 XSLT 樣式表
建立具有正確使用權限集合的 XmlSecureResolver 物件。
將 XmlSecureResolver 傳遞至 Load 方法。
Dim xslt As New XslCompiledTransform() xslt.Load("https://serverName/data/xsl/sort.xsl", Nothing, myResolver)
XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load("https://serverName/data/xsl/sort.xsl", null, myResolver);