如何防止TransformerFactory上的XML外部实体注入
作者:互联网
我的问题:
Fortify 4.2.1标记下面的代码易受XML外部实体攻击.
TransformerFactory factory = TransformerFactory.newInstance();
StreamSource xslStream = new StreamSource(inputXSL);
Transformer transformer = factory.newTransformer(xslStream);
解决方案我试过:
>将XMLConstants.FEATURE_SECURE_PROCESSING的TransformerFactory功能设置为true.
>研究为TransformerFactory提供更多此类功能的可能性,就像我们为DOM和SAX解析器所做的那样.例如不允许使用doctype声明等.但TransformerFactoryImpl似乎不接受XMLConstants.FEATURE_SECURE_PROCESSING的任何其他内容. Impl Code
请指出您认为我可能没有经历的任何资源或此问题的可能解决方案.
解决方法:
TransformerFactory trfactory = TransformerFactory.newInstance();
trfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
trfactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");
我认为这就足够了.
Fortify会建议以下功能,但这些功能不适用于TransformerFactory
actory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
我们可能需要更改为不同的解析器才能使用它们.
标签:java,xml,xslt,fortify,xxe 来源: https://codeday.me/bug/20190623/1272677.html