采用 Saxon 的 XSLT 的完整接口机制
XXE 预防属性
getTransformerFactory 是由 PTC 提供的通用安全 API,其中提供了 TransformerFactory 实例。此实例可用于 XSLT 变换。如果 Saxon 在类路径中,则此实例由 Saxon 提供,否则使用 JDK 实施。由于此 API 是安全的,不允许将外部 DTD 和样式表包括在父 XSLT 文件中。为防止 XXE 攻击风险,Saxon 引入了以下属性。PTC 引入了对这些属性的支持。这些属性可限制对外部 DTD 和样式表的访问。

final TransformerFactory transformerFactory = (new JAXPFactories()).getTransformerFactory();
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
使用上述配置后,对 DTD 或样式表的外部参考将无法正常工作。为避免因上述属性配置而导致错误,Saxon 需要使用文件解析器。PTC 引入了 WTURIResolver。每次使用 getTransformationFactory API 时,请为给定的父 xsl 文件设置 WTURIResolver,如下面的示例代码所示。使用此配置后,将参考位于 WT_HOME 中的包含文件。要包含的文件必须位于 WT_HOME 位置。
tFactoryImpl.setURIResolver(new WTURIResolver(filterFile));
这对您有帮助吗?