【发布时间】:2020-08-10 14:15:18
【问题描述】:
在 Saxon API 中,可以使用 XML_PARSER_FEATURE Config 功能将 XML 解析器功能传递给 Configuration 对象。
但这似乎只适用于源文档的解析,而不适用于 XSLT 样式表。除了插入自定义解析器之外,还有其他方法可以配置样式表解析吗?
具体来说,出于安全原因,我需要确保禁用外部实体。
【问题讨论】:
在 Saxon API 中,可以使用 XML_PARSER_FEATURE Config 功能将 XML 解析器功能传递给 Configuration 对象。
但这似乎只适用于源文档的解析,而不适用于 XSLT 样式表。除了插入自定义解析器之外,还有其他方法可以配置样式表解析吗?
具体来说,出于安全原因,我需要确保禁用外部实体。
【问题讨论】:
首先,请注意,如果您不信任样式表,除了使用外部实体之外,它还有很多很多方法可以造成损害。因此禁用外部实体只是您需要采取的步骤之一:其中最重要的是禁用自反扩展函数的使用。
配置解析器以处理样式表模块的最佳方式是自己创建它。对于主样式表模块,提供一个包含XMLReader 的SAXSource,并按照您想要的方式进行配置。对于包含和导入的模块,请使用分配 XMLReader 并返回 SAXSource 的 URIResolver。
还有一个配置选项Feature.STYLE_PARSER_CLASS。您可以使用它来实现您自己的实现XMLReader 接口的类,将实际解析委托给您可以完全控制的“真实”XMLReader。
【讨论】: