此处配置的XML解析器不会阻止或限制外部实体的解析

时间:2015-11-27 06:19:00

标签: java fortify

当我在此计划上运行HP Fortify时:

    DOMSource domSource = new DOMSource(document);
    ByteArrayOutputStream bos=new ByteArrayOutputStream();

    StreamResult result = new StreamResult(bos);
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer;
    try {
        transformer = tf.newTransformer();
        transformer.transform(domSource, result);
    } catch (TransformerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

我收到此错误:

  

在ItemServlet.java:92中配置的XML解析器不会阻止或限制外部实体的解析。这可能会将解析器暴露给XML外部实体攻击。

根据此blog,应设置以下功能。

tf.setFeature("http://xml.org/sax/features/external-general-entities", false);
tf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

但问题是我的TransformerFactory实例不支持此方法。

1 个答案:

答案 0 :(得分:0)

您必须找到一种不同的方法来防止变压器扩展您不需要的任何外部实体。 这可能需要破解变换器,重写它甚至预处理XML以检测实体并抛出异常。