Как я могу распознать злое регулярное выражение?
Я недавно узнал оРегулярное выражение Отказ в обслуживании атак и решил искоренить так называемые «злые» шаблоны регулярных выражений, где бы я ни находил их в своей кодовой базе - или, по крайней мере, те, которые используются при вводе пользователем. Примеры, приведенные наOWASP ссылка выше ивикипедия полезны, но они не очень хорошо объясняют проблему простыми словами.
Описание злых регулярных выражений, извикипедия:
регулярное выражение применяет повторение ("+", "*") к сложному подвыражению;для повторного подвыражения существует совпадение, которое также является суффиксом другого действительного совпадения.С примерами, снова извикипедия:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x}
для х> 10Это проблема, которая не имеет более простого объяснения? Я ищу что-то, что помогло бы избежать этой проблемы при написании регулярных выражений или найти их в существующей кодовой базе.