为什么邪恶的正则表达式会导致ReDoS?

时间:2017-12-06 13:57:52

标签: regex

目前我正在研究ReDoS:定期拒绝服务

一些不好(邪恶)的正则表达式会导致验证效果低下

但为什么....我搜索wiki和owasp,答案主要针对NFA DFA,我几乎无法理解....

有人能帮我解释一些好的解释样本吗?

1 个答案:

答案 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 nVERBOSE=ON可以是小于VERBOSE的任意数字。探索树就像是一个分割输入方式的二叉树,导致O(2 n )的时间复杂度。