gpt4 book ai didi

java - 忽略java中的DTD规范有什么影响?

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

代码分析器工具正在通知有关 XML 实体扩展注入(inject),因为没有实现 DTD 规范。

所以我想禁用 DTD 规范检查

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

所以我想知道

  1. 它会破坏实际的代码流吗?
  2. 它会引起更多问题吗?
  3. 有没有其他办法处理?

最佳答案

要安全地使用解析器,您必须在您使用的解析器中明确禁用 XXE。下面介绍如何在最常用的 Java XML 解析器中禁用 XXE。

JAXP DocumentBuilderFactory 和 SAXParserFactory

DocumentBuilderFactory 和 SAXParserFactory XML 解析器都可以使用相同的技术进行配置,以保护它们免受 XXE 攻击。此处仅提供 DocumentBuilderFactory 示例。

  • JAXP DocumentBuilderFactory setFeature 方法允许开发人员控制哪些特定于实现的 XML 处理器功能启用或禁用

.

  • 每个 XML 处理器实现都有其自己的功能,用于控制 DTD 和外部实体的处理方式。

有关 DocumentBuilderFactory 的语法高亮代码片段,请单击 here .

有关 SAXParserFactory 的语法突出显示代码片段,请单击 here .

这些链接将为您提供如何将 DTD 用于两个解析器的完整详细信息。

Xerces 1 特点:

通过将此功能设置为 false,不包括外部实体。通过将此功能设置为 false,不包含参数实体。

Xerces 2 功能:

通过将此功能设置为 true 来禁止内联 DTD。通过将此功能设置为 false,不包括外部实体。通过将此功能设置为 false,不包括参数实体。StAX 和 XMLInputFactoryXMLInputFactory 等 StAX 解析器允许设置各种属性和功能。

要保护 Java XMLInputFactory 免受 XXE 攻击,请执行以下操作:

xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false);//这将完全禁用该工厂的 DTD

关于java - 忽略java中的DTD规范有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979599/

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