我的问题:

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
    factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
    factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    

    我们可能需要更改为其他解析器才能使用它们。

    07-28 02:08