如何:使用 XmlSecureResolver 类
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/");
使用权限集限制访问
创建一个 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 用于创建应用于基础 XmlResolver 的 PermissionSet。 在打开任何资源之前,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);