【发布时间】:2011-07-15 11:53:57
【问题描述】:
什么是导致许多解析器(时间和内存)崩溃的病态正则表达式? 以及哪些解析器?正则表达式越基本和标准,非恶意用户就越有可能无辜地提出它。 随意发布实际时间和内存数据,以及解析器版本。
(我似乎记得 PERL 中的过度后向断言或 (EDIT:) 回溯据说会这样做,或者至少曾经是这样做的。还有其他的吗?)
【问题讨论】:
-
你对回溯的想法,如果你能控制主题和模式,几乎任何基于 NFA 的正则表达式引擎都可以被欺骗成准无限回溯。基于 DFA 的引擎不需要进行回溯,因此它们不会遇到这种陷阱。下一个问题的答案是“因为 DFA 通常无法支持 NFA 可以提供的功能。”