据我了解,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攻击的正确方法吗?
答案 0 :(得分:1)
这是避免XInclude和实体攻击的正确方法,但这并不是对XInclude攻击的有效测试。
根据this answer,“ XInclude支持依赖于名称空间支持,出于向后兼容的原因,默认情况下该功能已关闭”。因此致电dbf.setNamespaceAware(true);