ReDos——低效的正则表达式

我之前在写代码时用到了一个正则表达式来匹配 URL，CodeQL 检测出其存在问题： This part of the regular expression may cause exponential backtracking on strings starting with '0' and containing many repetitions of '0'. 这其实是 CWE-1333 ，表明一个正则表达式可能出现极为低效的情况。接下来我们来看看具体是怎么回事。 正则表达式通常会被解析为一个非确定性有限自动机（NFA）， 其中每对状态和输入符号可能存在​​多个可能的后续状态 。算法会逐一尝试所有可能的路径，直到找到匹配项。这一情况通常被称为 backtracking。 例如，对于正则表达式 ^(aa|.)+$ ，如果输入为无法匹配到的 aaX ，算法会尝试以下路径： 按照左侧的 aa…