我正在努力确保某些代码不容易受到XXE攻击。对于在Java 7和Java 8上编译和运行的东西,我已经成功完成了OWASP的建议 - 请参阅https://www.owasp.org/index.php/XML_External_Entity_%28XXE%29_Processing的Java部分
以下是相关的片段,缩小了:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
String FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
dbf.setFeature(FEATURE, true);
FEATURE = "http://xml.org/sax/features/external-general-entities";
dbf.setFeature(FEATURE, false);
FEATURE = "http://xml.org/sax/features/external-parameter-entities";
dbf.setFeature(FEATURE, false);
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);
然而,还有(叹气)需要修复的Java 1.4版本的代码。但是在Java 1.4中,DocumentBuilderFactory
类不具有setFeature()
方法,因此这种方法似乎不适用。
我花了一些时间进行搜索,但是在Java 1.4 / JAXP 1.1处理上并没有太多遗漏,即使找到了解决方案,文档中的链接也常常没用。到目前为止,我还没有找到如何在Java 1.4中禁用XXE,所以我在这里问。