System.Xml.XmlReaderSettings 类
本文提供了此 API 参考文档的补充说明。
使用 Create 方法获取 XmlReader 实例。 此方法使用 XmlReaderSettings 类指定要在创建的 XmlReader 对象中实现哪些功能。
有关用于符合性检查、验证和其他常见场景的设置的信息,请参阅 XmlReader 和 Create 参考页的“备注”部分。 有关默认设置列表,请参阅 XmlReaderSettings() 构造函数。
安全注意事项
使用 XmlReaderSettings 类时,请考虑以下事项。
默认情况下不设置 ProcessInlineSchema 对象的 ProcessSchemaLocation 和 XmlReaderSettings 验证标志。 设置了这些标志后,XmlResolver 对象的 XmlReaderSettings 用于在 XmlReader 中解析实例文档中遇到的架构位置。 如果 XmlResolver 对象是
null
,即使设置了 ProcessInlineSchema 和 ProcessSchemaLocation 验证标志,也不会解析架构位置。在验证过程中添加的架构会添加新类型,并且可能更改被验证的文档的验证结果。 因此,只应从可信的源解析外部架构。
验证错误消息可能会公开敏感的内容模型信息。 验证错误和警告消息使用 ValidationEventHandler 委托进行处理,或在未向 XmlReaderSettings 对象提供事件处理程序的情况下作为 XmlSchemaValidationException 公开(验证警告不会引发 XmlSchemaValidationException)。 不应在不受信任的场景中公开此内容模型信息。 验证警告消息默认情况下会被禁止,可以通过设置 ReportValidationWarnings 标志来报告。
XmlSchemaValidationException 的 SourceUri 属性会返回导致异常的架构文件的 URI 路径。 不应在不受信任的场景中公开 SourceUri 属性。
在高可用性场景中,当参照对文档的大部分内容具有标识约束的架构验证不受信任的大型 XML 文档时,建议禁用 ProcessIdentityConstraints 标志(默认情况下会启用)。
XmlReaderSettings 对象可以包含敏感信息,例如用户凭据。 在缓存 XmlReaderSettings 对象时,或在将 XmlReaderSettings 对象从一个组件传递到另一个组件时,应小心。
默认情况下禁用 DTD 处理。 如果启用 DTD 处理,则需要包含来自不受信任的源的 DTD 和可能的拒绝服务攻击。 请使用 XmlSecureResolver 来限制 XmlReader 可以访问的资源。
不接受来自不可信的源的支持组件,例如 NameTable、XmlNamespaceManager 和 XmlResolver 对象。
使用 XmlReader 的应用程序的内存使用量可能与分析的 XML 文档的大小有关。 拒绝服务攻击的一种形式是提交过大的 XML 文档进行分析。 可以通过设置 MaxCharactersInDocument 属性来限制可分析的文档的大小,然后通过设置 MaxCharactersFromEntities 属性来限制扩展实体产生的字符数。