如何:使用 XmlSecureResolver 类

更新:November 2007

XmlSecureResolver 类通过包装 XmlResolver 对象并限制基础 XmlResolver 有权访问的资源,可以帮助保证另一个 XmlResolver 对象的安全。 例如,XmlSecureResolver 类可以禁止访问特定的 Internet 站点或区域。

使用 URL 限制访问

  • 创建一个只允许访问本地 Intranet 站点的 XmlSecureResolver 对象。

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

使用权限集限制访问

  1. 创建一个 WebPermission 对象。

    Dim myWebPermission As New WebPermission(PermissionState.None)
    
    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
  2. 只允许访问下列两个 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/");
    
  3. 将 Web 权限添加到 PermissionSet 对象中。

    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
  4. 使用该权限集创建 XmlSecureResolver 对象。

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

使用证据限制访问

  • 可以使用 Evidence 限制访问。 Evidence 用于创建应用于基础 XmlResolverPermissionSet。 在打开任何资源之前,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 对象

  1. 使用正确的权限集创建 XmlSecureResolver 对象。

  2. 创建使用 XmlSecureResolver 对象的 XmlReaderSettings 对象。

    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
  3. 使用 XmlReaderSettings 对象来创建 XmlReader 对象。

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

使用 XmlSecureResolver 加载 XSLT 样式表

  1. 使用正确的权限集创建 XmlSecureResolver 对象。

  2. 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);
    

请参见

其他资源

安全性和 System.Xml 应用程序

XML 文档和数据