我已经了解到,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 攻击的正确方法吗?