目前我正在研究ReDoS:定期拒绝服务
一些不好(邪恶)的正则表达式会导致验证效果低下
但为什么....我搜索wiki和owasp,答案主要针对NFA DFA,我几乎无法理解....
有人能帮我解释一些好的解释样本吗?
答案 0 :(得分:2)
它被称为Catastrophic Backtracking。
当没有匹配时,会发生O(2 n )不匹配的方式,必须在返回false
之前进行全部探索。
来自https://www.regular-expressions.info的链接文章中的示例为(x+x+)+y
,当与xxxxxxxxxx
的输入一起使用时,将需要大约2500步才能发现其中没有匹配项。添加一个x
,需要5000步,依此类推。输入100 x
s后,您就会谈论数十亿年的计算时间。
原因是m
x+x+
种方式与m
x
匹配n / m
种方式(x+x+)
n
方式x
重复m
n
和VERBOSE=ON
可以是小于VERBOSE
的任意数字。探索树就像是一个分割输入方式的二叉树,导致O(2 n )的时间复杂度。