共用方式為


System.Xml.XmlSecureResolver 類別

本文提供此 API 參考文件的補充備註。

XmlUrlResolver 類別是 System.Xml 命名空間中所有類別的預設解析程式。 它用來載入 XML 檔,以及解析外部資源,例如實體、DTD 或架構,以及匯入或 include 指示詞。

您可以指定要 XmlResolver 使用的物件來覆寫此預設值。 例如,如果您想要限制基礎 XmlResolver 可以存取的資源,您可以使用 XmlSecureResolver 物件。

XmlSecureResolver 包裝在的實作周圍 XmlResolver ,並限制基礎 XmlResolver 可存取的資源。 例如, XmlSecureResolver 能夠禁止跨網域重新導向,這會從內嵌的統一資源標識碼 (URI) 參考中發生。

當您建構 XmlSecureResolver 物件時,您會提供有效的 XmlResolver 實作以及URL、辨識項對象的實例,或用來判斷安全性的許可權集 XmlSecureResolverSystem.Security.PermissionSet會產生 或使用現有的,並在PermissionSet.PermitOnly其上呼叫 ,以協助保護基礎 XmlResolver

重要

XmlSecureResolver 物件可以包含機密資訊 (如使用者認證)。 快取 XmlSecureResolver 物件時請小心,不應將 XmlSecureResolver 對象傳遞至不受信任的元件。

重要

在 .NET Common Language Runtime (CLR) 上執行之程式代碼的安全性基礎結構和在 Microsoft SQL Server 2005 內整合之 CLR 上執行的程式代碼有差異。 這可能會導致針對 .NET CLR 開發的程式代碼在 SQL Server 整合 CLR 上使用時以不同方式運作的情況。 當您有以 URL 為基礎的辨識項時,其中一個差異會影響 XmlSecureResolver 類別(也就是當您使用 CreateEvidenceForUrl(String) 方法或建 XmlSecureResolver 構函式時)。 SQL Server 整合 CLR 的原則解析機制不會使用 UrlZone 資訊。 相反地,它會根據伺服器載入元件時新增的 GUID 來授與許可權。 當您在 XmlSecureResolver SQL Server 整合 CLR 中使用 時,請使用指定的 PermissionSet直接提供任何必要辨識項。

使用安全解析程式

  1. 建立具有正確使用權限集合的 XmlSecureResolver 物件。

  2. 建立使用 XmlReaderSettings 物件的 XmlSecureResolver 物件。

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. 當您建立 XmlReader 物件時,將 XmlReaderSettings 對象傳遞至 Create 方法。

    XmlReader reader = XmlReader.Create("books.xml", settings);
    
    Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
    

使用 URL 限制存取

使用建 XmlSecureResolver(XmlResolver, String) 構函式來建立 XmlSecureResolver 只允許存取本機內部網路網站的物件。

XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")

若要使用許可權集合來限制存取

  1. 建立 WebPermission 物件。

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. 指定您想要允許存取的網址。

    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/");
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/");
    
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/")
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
    
  3. 將 Web 使用權限加入至 PermissionSet 物件。

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. 使用 建 XmlSecureResolver(XmlResolver, PermissionSet) 構函式來建立 XmlSecureResolver 物件,方法是使用許可權集合。

    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
    
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
    

    如需其他範例, XmlSecureResolver 請參閱參考頁面。

使用辨識項限制存取

您可以使用 建 XmlSecureResolver(XmlResolver, Evidence) 構函式並指定 Evidence來限制存取。 Evidence 可用於建立 PermissionSet,其會套用至基礎 XmlResolver。 在開啟任何資源之前,XmlSecureResolver 都會呼叫已建立之 PermitOnly 上的 PermissionSet

以下是一些常見的案例,以及每個案例所提供的辨識項類型:

  • 如果您在完全信任的環境中工作,請使用您的元件來建立辨識項:

    Evidence myEvidence = this.GetType().Assembly.Evidence;
    XmlSecureResolver myResolver;
    myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence
    Dim myResolver As XmlSecureResolver
    myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • 如果您在半信任的環境中工作,您有來自外部來源的程式代碼或數據,而且您知道外部來源的來源,並具有可驗證的 URI,請使用 URI 來建立辨識項:

    
    Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI);
    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI)
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • 如果您在半信任的環境中工作,而且您有來自外部來源的程式代碼或數據,但您不知道外部來源的來源,要麼:

    evidence 參數設定為 null。 這可以拒絕對資源的任何存取。

    -或-

    如果應用程式需要資源的某些存取權,請要求呼叫端的辨識項。

若要使用安全解析程式載入 XSLT 樣式表單

  1. 建立具有正確使用權限集合的 XmlSecureResolver 物件。

  2. XmlSecureResolver 傳遞至 Load 方法。

    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("http://serverName/data/xsl/sort.xsl", null, myResolver);
    
    Dim xslt As New XslCompiledTransform()
    xslt.Load("http://serverName/data/xsl/sort.xsl", Nothing, myResolver)