我在我的veracode报告中得到了下一个发现:不适当地限制XML外部实体引用('XXE') (CWE ID 611)引用下面的代码
..。
DocumentBuilderFactory dbf=null;
DocumentBuilder db = null;
try {
dbf=DocumentBuilderFactory.newInstance();
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setExpandEntityReferences(false);
dbf.setXIncludeAware(false);
dbf.setValidating(false);
dbf.newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(datosXml.getBytes());
Document doc = db.parse(stream, ""); ..。
我一直在研究,但我没有找到这个发现的原因,也没有找到让它消失的方法。你能告诉我怎么做吗?
发布于 2015-07-09 16:39:44
你有没有看过关于XXE的OWASP指南(https://www.owasp.org/index.php/XML(XXE%29_Processing)?
您没有禁用您应该禁用的3个功能。最重要的是第一个:
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);发布于 2020-11-04 23:01:24
背景:
XXE攻击是围绕使用外部数据类型定义(DTD)定义任意实体的XML语言功能以及读取或执行文件的功能构建的。
下面是一个包含DTD声明的XML文件示例,当处理该声明时,可能会返回本地“/etc/passwd”文件的输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE test [
<!ELEMENT test ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>缓解:
要避免利用XEE漏洞,最好的方法是禁用从外部源加载实体的功能。
现在,禁用DTD的方法将根据所使用的语言(Java、C++、.NET)和所使用的XML解析器(考虑到Java语言的DocumentBuilderFactory、SAXParserFactory、TransformerFactory等)而有所不同。
下面两个官方参考提供了关于如何实现相同目标的最佳信息。
https://stackoverflow.com/questions/30978855
复制相似问题