【发布时间】:2012-10-11 14:30:33
【问题描述】:
我最近意识到Regular expression Denial of Service 攻击,并决定在我的代码库中找到所谓的“邪恶”正则表达式模式——或者至少是那些在用户输入中使用的模式。上面OWASP link 和wikipedia 给出的示例很有帮助,但它们不能很好地简单地解释问题。
邪恶正则表达式的描述,来自wikipedia:
- 正则表达式将重复(“+”、“*”)应用于复杂的子表达式;
- 对于重复的子表达式,存在一个匹配,该匹配也是另一个有效匹配的后缀。
举个例子,同样来自wikipedia:
(a+)+([a-zA-Z]+)*(a|aa)+(a|a?)+-
(.*a){x}x > 10
这是一个没有更简单解释的问题吗?我正在寻找可以在编写正则表达式或在现有代码库中找到它们时更容易避免此问题的方法。
【问题讨论】:
-
关于这个话题的另一个链接是这个:regular-expressions.info/catastrophic.html
-
这是一个对正则表达式执行静态分析以发现疑似 ReDoS 问题的工具:cs.bham.ac.uk/~hxt/research/rxxr.shtml
-
@tripleee 提供的链接似乎与 RXXR 工具的链接断开。这是一个 GitHub 镜像:github.com/ConradIrwin/rxxr2
-
此外,对于那些好奇的人,看起来原始 RXXR 工具的作者用 RXXR2 取代了它。他们的新页面托管在这里,目前确实有一个到 RXXR2 源的工作链接:cs.bham.ac.uk/~hxt/research/rxxr2
标签: regex