如何在保持安全性的同时在XSLT上提供实用程序

时间:2017-12-12 20:53:40

标签: java xml xslt javax.xml

我希望能够提供可在XSL样式表中使用的转义实用程序。例如:

<xsl:stylesheet version="2.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   xmlns:xs="http://www.w3.org/2001/XMLSchema" 
   xmlns:xalan="http://xml.apache.org/xalan" 
   xmlns:escape="xalan://com.example.myservice.MyEscapeTool">

但是,就Java而言,我的理解是您的TransformerFactory上缺少以下设置可能是不安全的:

factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

所以我这样做了,但可以理解这阻碍了你使用&#34;外部函数调用的能力&#34;出现以下运行时错误:

FATAL: XPath syntax error at char 12 in {escape:new()}:
    Cannot find a matching 0-argument function named 
{java:com.example.myservice.MyEscapeTool}new(). Note: external 
function calls have been disabled;

删除上述FEATURE_SECURE_PROCESSING标志将解决问题。

如何包含可以在XSLT中调用的实用程序函数,而不会因为暴露任意Java类而导致安全性损失?

1 个答案:

答案 0 :(得分:1)

正如@MartinHonnen在评论中指出的那样,如果你转而使用Saxon,那么你可以限制样式表只使用&#34;集成的扩展功能&#34;它们在执行之前在XSLT处理器中注册,而不允许样式表调用恰好位于类路径上的任何类/方法。