Является ли шаблон регулярных выражений электронной почты, предлагаемый W3C, подверженным ReDoS-атакам? - PullRequest
0 голосов
/ 11 октября 2018

Это шаблон регулярного выражения, предлагаемый для проверки электронной почты спецификацией W3C HTML :

^[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)».Я думаю, что это ложный положительный результат, но я не эксперт в этой области, и я могу что-то упустить.

Я считаю, что Сонар считает, что он может быть подвержен атакам ReDoS из-за повторяющихся вложений - [a-zA-Z0-9-]{0,61} содержится вза группой следует звездочка.Но, тем не менее, я думаю, что когда механизм регулярных выражений откатывает это выражение, оно может быстро разрешить его, так как после этого ожидается либо точка, либо конец строки.Верны ли мои рассуждения?

1 Ответ

0 голосов
/ 11 октября 2018

Сонар не такой умный.Он видит количественные группы, которые включают количественные шаблоны.Хотя это и является основной причиной 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])?)*
                                                 ^

Эта граница делает невозможным более раннее возникновение(смотрите, что происходит без этого ).Если бы этого не было, мы могли бы сказать, что сонар на сто процентов прав.Ваши рассуждения верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...