3

我已经了解到,XInclude当从不受信任的来源接收 XML 时,这是一个潜在的漏洞。见https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#Java

我期望从外部来源获得的 XML 非常简单,并且从来不需要包含外部 XML。

我尝试了以下方法来禁用 XInclude(如备忘单中推荐的那样):

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);

并使用此 XML 进行测试

<?xml version="1.0" encoding="utf-8"?>
<data xmlns:xi="http://www.w3.org/2001/XInclude">
    <xi:include href="file://d/temp/badxml.xml" parse="xml">
    </xi:include>
</data>

外部文件包含无效的 XML。

我曾预计如果setXIncludeAware设置为解析器会失败,true但事实并非如此。该片段始终是可解析的。我正在使用 Java 8。

这是一个有效的测试吗?这是避免 XInclude 攻击的正确方法吗?

4

1 回答 1

1

这是避免 XInclude 和实体攻击的正确方法,但正如您所发现的那样,这不是 XInclude 攻击的有效测试。

根据这个答案,“XInclude 支持依赖于命名空间支持,出于向后兼容性的原因,它默认关闭”。所以打电话dbf.setNamespaceAware(true);

于 2018-11-06T11:11:56.063 回答