2.7.4. 配置文档强制


XML 文档解析器受到 XXE(XML eXternal Entity)攻击,其中扩展外部实体会导致加载不安全的文件。例如,以下文档可能会导致加载 /etc/passwd 文件:

<!--?xml version="1.0"?-->
<!DOCTYPE foo
[<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<search>
 <user>bill</user>
 <file>&xxe;<file>
</search>

默认情况下,org.w3c.dom.Document 文档的 RESTEasy 内置 unmarshaller 不扩展外部实体。它将它们替换为空字符串。您可以将其配置为将外部实体替换为 DTD 中定义的值。这可以通过在 web.xml 文件中将 resteasy.document.expand.entity. references 上下文参数设置为 true 来实现。

示例:设置 resteasy.document.expand.entity.references 上下文参数

<context-param>
 <param-name>resteasy.document.expand.entity.references</param-name>
 <param-value>true</param-value>
</context-param>

另一种解决问题的方法是禁止 DTD,RESTEasy 默认这样做。可以通过将 resteasy.document.secure.disableDTDs 上下文参数设置为 false 来更改此行为。

示例:设置 resteasy.document.secure.disableDTDs Context Parameter

<context-param>
 <param-name>resteasy.document.secure.disableDTDs</param-name>
 <param-value>false</param-value>
</context-param>

当缓冲区被大型实体超额或太多属性时,文档也会受到服务攻击的 Denial 服务攻击的影响。例如,如果 DTD 定义了以下实体,则 &foo6 的扩展会导致 1,000,000 foos。

<!--ENTITY foo 'foo'-->
<!--ENTITY foo1 '&foo;&foo;&foo;&foo;&foo;&foo;&foo;&foo;&foo;&foo;'-->
<!--ENTITY foo2 '&foo1;&foo1;&foo1;&foo1;&foo1;&foo1;&foo1;&foo1;&foo1;&foo1;'-->
<!--ENTITY foo3 '&foo2;&foo2;&foo2;&foo2;&foo2;&foo2;&foo2;&foo2;&foo2;&foo2;'-->
<!--ENTITY foo4 '&foo3;&foo3;&foo3;&foo3;&foo3;&foo3;&foo3;&foo3;&foo3;&foo3;'-->
<!--ENTITY foo5 '&foo4;&foo4;&foo4;&foo4;&foo4;&foo4;&foo4;&foo4;&foo4;&foo4;'-->
<!--ENTITY foo6 '&foo5;&foo5;&foo5;&foo5;&foo5;&foo5;&foo5;&foo5;&foo5;&foo5;'-->

默认情况下,RESTEasy 限制各个实体的扩展数和属性数量。确切的行为取决于底层解析器。可以通过将 resteasy.document.secure.process.feature 上下文参数设置为 false 来关闭限制。

示例:设置 resteasy.document.secure.process.feature Context Parameter

<context-param>
 <param-name>resteasy.document.secure.processing.feature</param-name>
 <param-value>false</param-value>
</context-param>

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.