其他分享
首页 > 其他分享> > 如何防止TransformerFactory上的XML外部实体注入

如何防止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