解决 Oracle DomParser 的 XXE
Resolving XXE for Oracle DomParser
这是我正在使用的 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 攻击的各种问题和答案,但找不到解决方案。
试试这个
domParser.setAttribute(XMLParser.RESOLVE_ENTITY_DEFAULT, true);
domParser.setAttribute(XMLParser.DEFAULT_ENTITY_EXPANSION_DEPTH, 150);
使用 XMLParser 和 DOMParser 的 Maven 依赖版本是什么来解决 DOM Parser 的强化修复。
此处记录了在 Oracle DOMParser 中处理 XXE 的正确方法。
// 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);
这是我正在使用的 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 攻击的各种问题和答案,但找不到解决方案。
试试这个
domParser.setAttribute(XMLParser.RESOLVE_ENTITY_DEFAULT, true);
domParser.setAttribute(XMLParser.DEFAULT_ENTITY_EXPANSION_DEPTH, 150);
使用 XMLParser 和 DOMParser 的 Maven 依赖版本是什么来解决 DOM Parser 的强化修复。
此处记录了在 Oracle DOMParser 中处理 XXE 的正确方法。
// 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);