JavaScript中的SonarQube Regex漏洞问题



无论我在JavaScript代码中使用Regex,SonarQube都会显示漏洞问题。在JavaScript中有Regex的替代方案吗?

样品Regex:

(^(?=[A-Za-z0-9._-]*$)(?=.*[A-Za-z0-9]).*$)

错误:

请确保在此处使用正则表达式是安全的。

这不是真正的问题,而是一个安全警告。

您检查了SonarQube对错误的描述吗?

根据输入字符串计算正则表达式可能是CPU密集型任务。特制的正则表达式例如(a+(+s将需要几秒钟的时间来评估输入字符串aaaaaaaaaa。

问题是,每增加一个字符输入时,计算regex所需的时间加倍。然而等价的正则表达式,a+s(不分组(是有效的以毫秒为单位进行评估,并随输入大小线性缩放。

评估这样的正则表达式打开了regular的大门表达式拒绝服务(ReDoS(攻击。在网络环境中应用程序,攻击者可以强制web服务器将其资源评估正则表达式,从而提供服务真正的用户无法访问。

此规则标记硬编码正则表达式的任何执行具有至少3个字符和任何以下字符:*+{.

示例:(a+(*

问问自己•执行的正则表达式是否敏感并且用户可以提供一个字符串,该字符串将由该正则表达式分析表达。•正则表达式引擎性能下降使用特制的输入和正则表达式。

如果你对其中任何一个问题的回答都是肯定的,你可能会面临风险。

要解决此问题,您需要手动检查RegEx是否存在风险。如果没有,您可以将其标记为假阳性,否则,检查regex可能是强制性的。

有关regex DoS问题的其他信息,请访问OWASP网站

字符串regex=request.getParameter("regex"(;字符串输入=request.getParameter("input"(;

input.matches(Pattern.squote(regex((
//兼容:对于Pattern.,引号元字符或转义序列将不会被赋予特殊意义的

注:-在声纳中工作

最新更新