共用方式為


System.Xml.XmlSecureResolver 類別

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

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

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

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

當您建構 XmlSecureResolver 物件時,您會提供有效的 XmlResolver 實作,以及 URL、證據物件的實例,或用來判斷安全性的 XmlSecureResolver 許可權集。 要麼生成System.Security.PermissionSet,要麼使用現有的System.Security.PermissionSet,並在其上呼叫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 來授與許可權。 當您在 SQL Server 整合的 CLR 中使用XmlSecureResolver時,請使用指定的 PermissionSet 直接提供任何必要的證據。

使用安全解析程式

  1. 使用正確的權限集合,建立XmlSecureResolver

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

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

    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用來建立套用至基礎PermissionSetXmlResolver。 在開啟任何資源之前,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)