【发布时间】:2016-03-24 19:13:32
【问题描述】:
This article 描述了两种方法来检测正则表达式是否容易受到灾难性回溯(以及因此 ReDOS 或正则表达式拒绝服务攻击)的影响:
模糊测试 - 本质上是一种蛮力检查是否有滞后的输入
分析 - 智能地查看正则表达式,并且能够精确定位 正则表达式出现减速的位置。
作为研究的一部分构建了一个分析工具,但我不确定它是否真的作为开源工具发布(正如它所说的那样)。
所以我的问题是:根据链接的文章,我将如何分析正则表达式的漏洞?我不是在寻找 Fuzzing,因为它更耗时并且无法确定问题的位置。
我知道另一个问题询问了一般情况下(答案都是模糊测试或“太难”)找到“坏正则表达式”的方法。
【问题讨论】:
-
正则表达式通常是为匹配而构建的——因此,对于搜索错误的正则表达式,通常是一个好的开始,看看它不匹配的情况。还有大量的无限量词,尤其是嵌套的、非占有性的和用于
.-Matches 的情况,值得仔细研究。 -
前者不起作用,因为触发输入可能非常少见。后者,好吧,当你完成时,你不妨把你正在使用的正则表达式引擎换成 RE2 什么的。
-
当重要时,您应该使用不会回溯的正则表达式实现
-
@MattTimmermans 我不相信每种语言都有一个
-
RE2's readme 列出了 C、Erlang、Inferno、Node.js、OCaml、Perl、Python 和 Ruby 的绑定。显然,还有 Lua 和 PHP 绑定。这不是每种语言,但它是一个很好的示例。
标签: regex algorithm denial-of-service