0

我制作了两个正则表达式,成功解析了我想要解析的字符串。但是,在针对 Sonar Cloud(质量和安全检查)运行包含正则表达式的代码时,我会收到有关性能和安全性的警告。

这是我制作的正则表达式(注意 · 和 - 字符):

// yearToYearWithIrrWAndDotRegex parses: · 1998 - 2001, · 2001 - Present
const yearToYearWithIrrWAndDotRegex = /·.*?(19|20)\d{2}.*?-.*?((19|20)\d{2}|Present)?/g;

// yearToYearRegex parses: 1998 - 2001, 2001 - Present
const yearToYearRegex = /(19|20)\d{2}.*?-.*?((19|20)\d{2}|Present)/g;

声纳云警告:

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

TLDR:有什么方法可以让我的 RegEx 变得更好?

4

1 回答 1

0

这看起来像是一个通用的安全警告 - 扫描程序可能看到您正在使用正则表达式并在其报告中删除了一个标准文本 blob。这种事情在动态或静态扫描仪中是相当标准的,在许多情况下他们无法确定所做的事情是否易受攻击,因此他们会谨慎行事。

从安全角度来看,您通常需要考虑输入数据的来源。如果您正在解析由其他企业提供的固定格式文件,那么您的风险比您在公共网站中解析用户输入的风险要小。解析上传的文件风险更大,因为更多的输入数据会导致更多的处理时间。

你的正则表达式对我来说看起来很简单——你没有使用正面或负面的环视或做任何棘手的事情。你可以替换你的 .*? 使用 \s+ 如果空格匹配将针对您的输入起作用。

于 2020-05-19T14:10:16.993 回答