【问题标题】:SonarQube security hotspot, Using regular expressionsSonarQube 安全热点,使用正则表达式
【发布时间】:2020-10-18 15:07:15
【问题描述】:

我将 SonarQube 用于我的项目,并且我有 "^.\+json[;]?\s$" 的安全热点:

       return mediaType != null 
             && (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)
             || mediaType.getSubtype().matches("^.*\\+json[;]?\\s*$"));
   }

Hier 是来自 SonarQube 的消息,

使用正则表达式是安全敏感的。它过去曾导致以下漏洞:

CVE-2017-16021

CVE-2018-13863

根据输入字符串评估正则表达式可能是一项非常耗费 CPU 的任务。特制的正则表达式(例如 (a+)+s)将需要几秒钟来评估输入字符串 aaaaaaaaaaaaaaaaaaaaaaaaaaaabs。问题在于,每向输入中添加一个字符,评估正则表达式所需的时间就会加倍。但是,等效的正则表达式 a+s(没有分组)可以在毫秒内高效计算,并随输入大小线性缩放。

评估此类正则表达式为正则表达式拒绝服务 (ReDoS) 攻击打开了大门。在 Web 应用程序的上下文中,攻击者可以强制 Web 服务器花费其所有资源来评估正则表达式,从而使真正的用户无法访问该服务。

此规则标记硬编码正则表达式的任何执行,该正则表达式至少包含 3 个字符和至少两个以下任何字符的实例:*+{。

示例:(a+)*

例外

对 String.split(regex) 和 String.split(regex, limit) 的调用不会引发异常,尽管它们使用了正则表达式。这些方法大部分时间用于拆分不会造成任何漏洞的简单正则表达式。

为什么?我该如何解决?

【问题讨论】:

    标签: java spring sonarqube


    【解决方案1】:

    抱歉有点晚了,但这会有所帮助:

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2022-01-14
      • 2020-12-29
      • 2021-01-01
      • 2019-11-16
      • 2011-03-04
      • 2013-07-31
      • 2010-11-24
      相关资源
      最近更新 更多