防止TrasnformerFactory的XXE强化问题

时间:2016-02-18 10:49:28

标签: java fortify

我需要解决XXE问题。我在代码中使用transformerfactory。 发现下面的修复,但我在我的代码中看不到ACCESS_EXTERNAL_DTD属性。我得到的是下面的代码将适用于Java7但是我使用的是Java 6.可以请一些其他修改 要保护Java TransformerFactory免受XXE的影响,请执行以下操作:

TransformerFactory tf = TransformerFactory.newInstance();
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

1 个答案:

答案 0 :(得分:0)

我遇到了同样的情况,如果不更新Java版本就很难解决。

以下代码更改能够通过强化扫描并获得相同的结果。

使用以下代码代替使用TransformerFactory:

   DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation();
   LSSerializer lsSerializer = domImplementation.createLSSerializer();
   LSOutput lsOutput = domImplementation.createLSOutput( );


   lsOutput.setEncoding("UTF-8");
   StringWriter stringWriter=new StringWriter();
   lsOutput.setCharacterStream(stringWriter);
   lsSerializer.write(doc,lsOutput);
   return stringWriter.toString();

如需参考,请查看Is there a more elegant way to convert an XML Document to a String in Java than this code?

并且