0

这是我正在使用的 DomParser 的代码片段,我正在使用的 DomParser 是 Oracle 的。

import oracle.xml.parser.v2.DOMParser;

DOMParser domParser = new DOMParser();      
domParser.parse(new StringReader(xmlPayload));    
Document doc = domParser.getDocument();

doc.getDocumentElement().normalize();
System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("student");

最近我们的安全团队提出了关于上述 DOM 解析器容易受到安全攻击的问题,并提出了设置两个属性的建议

domParser.setAttribute("RESOLVE_ENTITY_DEFAULT", true);
domParser.setAttribute("DEFAULT_ENTITY_EXPANSION_DEPTH", 150);

但是在设置这些属性时,我收到以下错误,

Exception in thread "main" java.lang.IllegalArgumentException
at oracle.xml.parser.v2.XMLParser.setAttribute(XMLParser.java:870)
at oracle.xml.parser.v2.DOMParser.setAttribute(DOMParser.java:538)
at DomParserExample.main(DomParserExample.java:20)

请让我知道如何防止 XML 实体扩展注入和 XXE 攻击。我曾尝试查看 OWASP XEE Cheat Sheet 并浏览了有关 XXE 攻击的各种问题和答案,但找不到解决方案。

4

3 回答 3

1

尝试这个

domParser.setAttribute(XMLParser.RESOLVE_ENTITY_DEFAULT, true);
domParser.setAttribute(XMLParser.DEFAULT_ENTITY_EXPANSION_DEPTH, 150);
于 2018-12-03T19:54:38.487 回答
0

此处记录了在 Oracle DOMParser 中处理 XXE 的正确方法。

https://docs.oracle.com/en/database/oracle/oracle-database/18/adxdk/security-considerations-oracle-xml-developers-kit.html#GUID-45303542-41DE-4455-93B3-854A826EF8BB

    // Extend oracle.xml.parser.v2.XMLParser
    DOMParser domParser = new DOMParser(); 

    // Do not expand entity references
    domParser.setAttribute(DOMParser.EXPAND_ENTITYREF, false);

    // dtdObj is an instance of oracle.xml.parser.v2.DTD
    domParser.setAttribute(DOMParser.DTD_OBJECT, dtdObj);

    // Do not allow more than 11 levels of entity expansion
    domParser.setAttribute(DOMParser.ENTITY_EXPANSION_DEPTH, 12); 
于 2020-07-29T01:43:23.537 回答
-1

使用 XMLParser 和 DOMParser 来解决 DOM Parser 的强化修复的 Maven 依赖项版本将是什么。

于 2019-11-28T17:36:57.797 回答