2.7.4. 配置文档强制
XML 文档解析器受到 XXE(XML eXternal Entity)攻击,其中扩展外部实体会导致加载不安全的文件。例如,以下文档可能会导致加载 /etc/passwd
文件:
默认情况下,org.w3c.dom.Document
文档的 RESTEasy 内置 unmarshaller 不扩展外部实体。它将它们替换为空字符串。您可以将其配置为将外部实体替换为 DTD 中定义的值。这可以通过在 web.xml 文件中将
上下文参数设置为 resteasy.document.expand.entity.
referencestrue
来实现。
示例:设置 resteasy.document.expand.entity.references
上下文参数
<context-param> <param-name>resteasy.document.expand.entity.references</param-name> <param-value>true</param-value> </context-param>
<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>
<context-param>
<param-name>resteasy.document.secure.disableDTDs</param-name>
<param-value>false</param-value>
</context-param>
当缓冲区被大型实体超额或太多属性时,文档也会受到服务攻击的 Denial 服务攻击的影响。例如,如果 DTD 定义了以下实体,则 &foo6 的扩展会导致
1,000,000 foos。
默认情况下,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>
<context-param>
<param-name>resteasy.document.secure.processing.feature</param-name>
<param-value>false</param-value>
</context-param>