|
1
3
为了安全地使用解析器,必须在使用的解析器中显式禁用XXE。下面介绍如何在最常用的Java XML解析器中禁用XXE。 JAXP DocumentBuilderFactory和SAXParserFactory DocumentBuilderFactory和SAXParserFactory XML解析器都可以使用相同的技术进行配置,以保护它们不受XXE的影响。 此处仅显示DocumentBuilderFactory示例。
.
有关DocumentBuilderFactory的语法高亮显示的代码段,请单击 here . 有关SAXParserFactory的语法高亮显示的代码段,请单击 here . 这些链接将为您提供如何在两个解析器中使用DTD的详细信息。 Xerces 1特点: 不要通过将此功能设置为false来包含外部实体。 不要通过将此功能设置为false来包含参数实体。 Xerces 2特点: 通过将此功能设置为true,禁用内联DTD。 不要通过将此功能设置为false来包含外部实体。 不要通过将此功能设置为false来包含参数实体。 StAX和XMLInputFactory XMLInputFactory等StAX解析器允许设置各种属性和特性。 要保护Java XMLInputFactory不受XXE的影响,请执行以下操作: xmlInputFactory.setProperty(xmlInputFactory.SUPPORT_DTD,false);//这将完全禁用该工厂的DTD |
|
2
1
理想情况下,我们不应该禁用DTD规范检查。 相反,如果找不到特定的DTD,请使用EntityResolver绕过DTD检查。 以下是如何创建一个DocumentBuilder,它将忽略所有外部引用实体,包括DTD:
或者,您也可以执行以下操作:
|
|
3
1
在不禁用xml的DTD的情况下,可以尝试使用“SECURE_PROCESSING” 这可以处理易受XXE和dos攻击的xml解析:
|
![]() |
Johny Doe · XML-DTD-外部子集中的内容错误 6 年前 |
![]() |
Barry Allen · XML/DTD显示一些错误 6 年前 |
![]() |
Nur Hanisah · XML文件中的内部DTD错误 7 年前 |
![]() |
Matteo S. · lxml和python:如何设置“全局”实体 7 年前 |
![]() |
ladybug · XML和DTD的验证 7 年前 |
![]() |
Laurent LAPORTE · 免费XSD到DTD转换实用程序? 7 年前 |