据我所知,当从不受信任的来源接收XML时,XInclude是一个潜在的漏洞。请参阅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攻击的正确方法吗?
发布于 2018-11-06 11:11:56
这是避免XInclude和实体攻击的正确方法,但正如您已经发现的那样,这不是对XInclude攻击的有效测试。
根据this answer的说法,"XInclude支持依赖于名称空间支持,默认情况下,由于向后兼容性的原因,名称空间支持会被关闭“。所以叫dbf.setNamespaceAware(true);
https://stackoverflow.com/questions/53168546
复制相似问题