gpt4 book ai didi

java - 解析 XML 时如何禁用 XInclude?

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:27 31 4
gpt4 key购买 nike

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

最佳答案

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

根据 this answer ,“XInclude 支持依赖于命名空间支持,出于向后兼容的原因,默认情况下它是关闭的”。所以调用 dbf.setNamespaceAware(true);

关于java - 解析 XML 时如何禁用 XInclude?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53168546/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com