如果我已经在用
xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false);那么我是否也需要使用
xmlInputFactory.setProperty("javax.xml.stream.isSupportingExternalEntities", false);修复XXE漏洞?
发布于 2022-09-03 08:13:09
对于那个特定的类,不,您的解决方案是有效的。实际上,禁用外部实体而不是DTD将使您容易受到另一种用于拒绝服务的递归实体的攻击(也称为“数十亿笑”攻击)。
但是,请注意,Java有多个XML解析器,而且它们并不都关心XMLInputFactory或它的属性;除非您非常肯定您没有使用其他任何东西,否则可能还需要在其他方面禁用DTD。相关的OWASP备忘单列出了十多个用于Java的通用,其中大多数是独立配置的。
当然,在生成解析器对象之前,您需要禁用工厂上的属性(尽管在实际解析XML之前您可能能够修改解析器对象上的属性)。
发布于 2022-04-05 12:40:53
它依赖于应用程序背后支持的语言。例如,您使用的XMLInputFactory是Java解析器可用的库规则之一。主要的目标是禁用DTD,它基本上包括对这种攻击的主要防御。您可以从OWASP中找到一个完整的参考这里。
https://security.stackexchange.com/questions/260956
复制相似问题