XML 解析器不应容易受到 XXE 攻击。零影响解决问题的最佳方法?

问题描述 投票:0回答:2

我有一些 SonarQube 漏洞,其中一个引起了我的注意。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {           
    DocumentBuilder db = dbf.newDocumentBuilder();
    dom = db.parse(sIn);
} catch (ParserConfigurationException pce) {
    log.error("ERROR-pce***************************"+pce.getMessage(),pce);
    throw pce;
} catch (SAXException se) {
    log.error("ERROR-se**********************"+se.getMessage(),se);
    throw se;
} catch (IOException ioe) {
    log.error("ERROR-ioe*********************"+ioe.getMessage(),ioe);
    throw ioe;
}

正如您在我的代码中看到的,我有一个 new DocumentBuilder();然后我解析这个:

InputStream sIn = new ByteArrayInputStream(contenidoXml.getBytes(StandardCharsets.UTF_8));

声纳“解决方案”是执行以下操作之一:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// to be compliant, completely disable DOCTYPE declaration:
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
// or completely disable external entities declarations:
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
// or prohibit the use of all protocols by external entities:
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");

这是遗留代码,我在这里很迷失。有人可以向我解释一下这三种解决方案之间的差异,以及哪一种更有可能对代码产生零影响(我们必须更新不同的类,但上次部署的 SQ 在我的公司中甚至不存在)。

java xml security sonarqube builder
2个回答
5
投票

请参阅此处了解一般 XXE 信息

禁用 DOCTYPE 声明 - 禁用 DOCTYPE 处理,可能的影响是文档可能无法验证,仅进行格式正确性检查

禁用外部实体 - 如果在文档中声明的外部实体将不会被取消引用,实体的值(如果在文档中使用)将为空或(取决于配置的底层解析器)可以通过解析异常

禁止使用协议 - 解析器不会使用任何协议来访问外部 DTD 或 Schema。所有外部 DTD、模式都应通过 SYSTEM 标识符在本地可用或向解析器注册

您选择的方法很大程度上取决于您正在解析的文档。如果它使用模式,禁用 DOCTYPE 可能是一个很好的解决方案。如果保证文档不使用外部实体,则禁用 DOCTYPE 和外部实体可能是更好的方法


0
投票

从代码角度来看,解决方案是什么?

TransformerFactory dbf = TransformerFactory.newInstance(); dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

我正在使用上面的行,但我仍然得到声纳扫描中列出的漏洞。

© www.soinside.com 2019 - 2024. All rights reserved.