Java 解析XML时如何禁用XInclude?

Java 解析XML时如何禁用XInclude?,java,xml,xxe,Java,Xml,Xxe,据我所知,XInclude是从不可信来源接收XML时的一个潜在漏洞。看 我所期望的来自外部源的XML非常简单,并且不需要包含外部XML 我尝试了以下方法来禁用XInclude(如备忘单中所建议的): 并使用此XML进行测试 <?xml version="1.0" encoding="utf-8"?> <data xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include href="file://d/tem

据我所知,
XInclude
是从不可信来源接收XML时的一个潜在漏洞。看

我所期望的来自外部源的XML非常简单,并且不需要包含外部XML

我尝试了以下方法来禁用XInclude(如备忘单中所建议的):

并使用此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
,解析器会失败,但事实并非如此。代码段始终是可解析的。我正在使用Java8


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

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


根据“XInclude支持依赖于名称空间支持,由于向后兼容的原因,默认情况下会关闭名称空间支持”。因此调用
dbf.setNamespaceAware(true)

等等,是关于如何禁用XInclude的问题,还是当包含无效XML文件时解析是否应该失败的问题?@Progman主要目标是禁用XInclude(如标题所示)。我有点困惑,因为我预计当XInclude出现时会发生一些事情,例如解析错误。目前,我没有得到任何指示,因此不确定是否可以避免攻击。当您尝试加载带有启用或禁用XInclude标志的有效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>