Jak mogę rozpoznać zły regex?
Ostatnio zdałem sobie z tego sprawęWyrażenie regularne Denial of Service atakuje i postanowił wykorzenić tak zwane „złe” wzorce regex wszędzie tam, gdzie mogłem je znaleźć w moim kodzie źródłowym - lub przynajmniej te, które są używane na wejściu użytkownika. Przykłady podane wŁącze OWASP powyżej iwikipedia są pomocne, ale nie radzą sobie z wyjaśnianiem problemu w prosty sposób.
Opis złych regexów zwikipedia:
wyrażenie regularne stosuje powtarzanie („+”, „*”) do złożonego podwyrażenia;dla powtórnego podwyrażenia istnieje dopasowanie, które jest również przyrostkiem innego ważnego dopasowania.Z przykładami ponownie zwikipedia:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x}
dla x> 10Czy to problem, który nie ma prostszego wyjaśnienia? Szukam czegoś, co ułatwiłoby uniknięcie tego problemu podczas pisania wyrażeń regularnych lub znajdowanie ich w istniejącej bazie kodu.