Java SonarQube是安全热点,使用正则表达式
我在我的项目中使用SonarQube,我有“^.\+json[;]?\s$”的安全热点:Java SonarQube是安全热点,使用正则表达式,java,spring,sonarqube,Java,Spring,Sonarqube,我在我的项目中使用SonarQube,我有“^.\+json[;]?\s$”的安全热点: return mediaType != null && (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType) || mediaType.getSubtype().matches("^.*\\+json[;]?\\s*$")); } Hier
return mediaType != null
&& (MediaType.APPLICATION_JSON.isCompatibleWith(mediaType)
|| mediaType.getSubtype().matches("^.*\\+json[;]?\\s*$"));
}
Hier是SonarQube发出的信息
使用正则表达式是安全敏感的。它在过去导致了以下漏洞:
根据输入字符串计算正则表达式可能是一项CPU非常密集的任务。巧尽心思构建的正则表达式(如(a+)+s)将需要几秒钟来计算输入字符串aaaaaaaaaaaaaaaaaaaaaabs。问题在于,每向输入中添加一个字符,计算正则表达式所需的时间就会加倍。但是,等价的正则表达式a+s(不分组)以毫秒为单位进行有效计算,并随输入大小线性扩展
计算此类正则表达式会打开正则表达式拒绝服务(ReDoS)攻击的大门。在web应用程序的上下文中,攻击者可以强制web服务器将其所有资源用于计算正则表达式,从而使真正的用户无法访问该服务
此规则标记硬编码正则表达式的任何执行,该正则表达式至少包含3个字符和以下任意字符的至少两个实例:*+{
示例:(a+)*
例外情况
对String.split(regex)和String.split(regex,limit)的调用不会引发异常,尽管它们使用了正则表达式。这些方法大部分时间用于在简单正则表达式上进行拆分,而简单正则表达式不会产生任何漏洞
为什么?我该如何解决呢?抱歉,有点晚了,但这将有助于: