W3C规范建议的电子邮件正则表达式模式是否容易受到ReDoS攻击?

时间:2018-10-11 08:55:22

标签: regex sonarqube

这是W3C HTML spec建议用于电子邮件验证的正则表达式模式:

^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$

SonarQube将其标记为“容易受到拒绝服务攻击(ReDOS)”。 我认为这是一个错误的肯定,但是我不是该领域的专家,所以我可能会漏掉一些东西。

我相信Sonar认为由于嵌套重复-组中包含[a-zA-Z0-9-]{0,61},后跟星号,它可能会受到ReDoS攻击。但是,我仍然认为,当正则表达式引擎回溯此表达式时,它可以快速解决该问题,因为以后可以预期该行的点或结尾。我的推理正确吗?

1 个答案:

答案 0 :(得分:3)

声纳不是那么聪明。它看到包含量化模式的量化组。尽管这是发生ReDoS攻击的主要原因,但这还不够。

有问题的可疑正则表达式有一个边界:

[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*
                                                 ^

该边界使失败更早发生(请参阅happens without it)。如果没有,那我们可以说声纳是百分之一百正确的。您的推论是正确的。