Ta odpowiedź będzie miała bardziej ogólny obraz tej niezwykłej sytuacji przekrojowej, w której teoria złożoności ma zastosowanie do cyberbezpieczeństwa, a przykład zawiera niektóre znaczące niuanse / subtelności, które mogą wystąpić w tym obszarze. Jest to zasadniczo podobne do „ataku iniekcyjnego”, w którym pewne nieoczekiwane dane wejściowe powodują patologiczne zachowanie albo powodujące awarię systemu, albo powodujące jego nienormalnie długi czas.
Wikipedia ma 15 kategorii ataków typu „ odmowa usługi”, które należą do „powodzi na poziomie aplikacji” na tej liście. Innym nieco podobnym przykładem jest atak, który wypełnia dzienniki aplikacji.
Jedną poprawką dla ataków wstrzykiwanych jest „oczyszczenie wejścia”. Projektant aplikacji może dokonać ponownej oceny, jeśli konieczne jest skompilowanie dowolnych wyrażeń regularnych dostarczonych przez potencjalnie złośliwego użytkownika. Po prostu usunięcie zagnieżdżonych wyrażeń w wyrażeniu regularnym lub inne podobne ograniczenie prawdopodobnie wystarczyłoby, aby uniknąć tego ataku. Chociaż są one nieodłączne od wielu współczesnych programów, można zapewnić dużą liczbę funkcji bez oceny wyrażeń regularnych. Kontekst ma znaczenie, niektóre aplikacje nie wymagałyby takiego bezpieczeństwa.
Innym podejściem do poprawy tolerancji / odporności na błędy, które ma tu zastosowanie, są limity czasu określone na różnych poziomach stosu / hierarchii oprogramowania. Pomysł polegałby na określeniu limitu czasu / procesora lub limitu instrukcji dla „przeciętnej” oceny wyrażenia regularnego i zakończyłby się wcześniej, gdyby został przekroczony. Można je wdrożyć za pomocą niestandardowych rozwiązań, ale niewiele oprogramowania lub języków programowania ma wbudowane limity czasu lub ramy do tego celu.
Oto dobry przykład użycia limitów czasu w celu poprawy odporności na uszkodzenia i pokazuje projekt / architekturę / pov wysokiego poziomu w celu złagodzenia takich problemów: Tolerancja błędów w dużych woluminach, System rozproszony / Netflix. Nie ma nic konkretnego związanego z wyrażeniami regularnymi, ale o to tutaj chodzi: praktycznie każda logika na poziomie aplikacji może pasować do tego frameworka lub czegoś podobnego.
W tym artykule wskazano, w jaki sposób cofanie może w szczególności prowadzić do powolnego dopasowywania wyrażeń regularnych. Regeksy mają wiele różnych cech i można próbować ocenić, które z nich prowadzą do najgorszych zachowań.
Oto miła ankieta naukowa na ten temat z proponowanymi rozwiązaniami do analizy statycznej :