Kiedy wyrażenia regularne działają przeciwko wydajności
Pojedyncza linijka wyrażenia regularnego w C# może doprowadzić do upadku produkcyjnego API. Źle napisane wzorce powodują katastrofalne cofanie się, marnowanie cykli procesora i blokowanie wątków. To klasyczny przykład. Odmowa usługi za pomocą wyrażenia regularnego (ReDoS) - subtelny, ale niebezpieczny wektor ataku ukryty w kodzie.
⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.
Ten regex dla C# ma wadę w postaci zagnieżdżonych kwantyfikatorów, które powodują wykładniczy backtracking. Długi, złośliwy ciąg znaków może zablokować punkt końcowy lub mikrousługę.
Wersja bezpieczna:
Uwaga edukacyjna: Zawsze używaj limitów czasu (Opcje wyrażeń regularnych + Okres czasu) i uprościć zagnieżdżone grupy. W regex c# walidacja wydajności jest wymogiem bezpieczeństwa, a nie optymalizacją.
Dlaczego wzorce wyrażeń regularnych w języku C# stają się podatne na ataki
Kwantyfikatory niejednoznaczne (.*, .+lub (a+)+) i nieograniczone powtórzenia sprawiają, że wyrażenia regularne są częstym celem ataków DoS.
Gdy pojawiają się one w kontekstach sterowanych przez użytkownika, takich jak sprawdzanie poprawności danych wejściowych lub analiza dziennika, pojedynczy, odpowiednio spreparowany ładunek może zmonopolizować zasoby procesora.
⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.
Wersja bezpieczna:
Uwaga edukacyjna: Unikaj niejednoznacznych powtórzeń, ogranicz rozmiar danych wejściowych i zawsze testuj wydajność wyrażeń regularnych pod obciążeniem. Fragment kodu funkcjonalnego, wymuszanie limitów czasu i maksymalnej długości danych wejściowych jako zabezpieczeń w środowisku produkcyjnym.
Rzeczywisty wpływ na interfejsy API i CI/CD Przepływy pracy
Niebezpieczne wyrażenia regularne w C# nie ograniczają się do formularzy walidacyjnych. Programiści osadzają wzorce w filtrach dziennika, dopasowywaczach webhooków i automatycznych skanowaniach. CI/CDjeden niebezpieczny wzór może zatrzymać cały proces pipeline.
⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.
Nigdy nie przetwarzaj wyrażeń regularnych dostarczonych przez użytkownika bez kontroli poprawności lub limitu czasu.
Wersja bezpieczna:
Uwaga edukacyjna: Sprawdź poprawność zewnętrznego wyrażenia regularnego przed wykonaniem. Dodaj jawne sprawdzanie długości i wymuszaj limity czasu w pipelines.
Bezpieczne praktyki zapobiegające atakom typu DoS na wyrażenia regularne w języku C#
Zapobieganie ReDoS w wyrażeniach regularnych języka C# powinno być wbudowane w Twój rozwój i Przepływ pracy DevSecOps. Oto jak ustawić je domyślnie jako bezpieczne:
Najlepsze praktyki
- Zawsze ustawiaj limity czasu przy wszystkich ocenach wyrażeń regularnych.
- Unikaj katastroficznych wzorców, bez zagnieżdżonych kwantyfikatorów i grup niejednoznacznych.
- Ogranicz rozmiar wejściowy przed przejściem do wyrażenia regularnego.
- Prekompiluj zaufane wzorce w OpcjeRegex.Skompilowane.
- Zdezynfekuj wyrażenia dostarczone przez użytkownika lub umieść na białej liście dozwolone wzorce.
Mini lista kontrolna działań zapobiegawczych
- Przejrzyj wszystkie wyrażenia regularne pod kątem użycia języka C# w swojej bazie kodu.
- Aplikuj Okres czasu konsekwentnie przekroczenia limitu czasu.
- Ogranicz długość danych wejściowych API i CI.
- Przed wydaniem przetestuj wydajność wyrażeń regularnych.
- Automatyzacja statycznego wyrażenia regularnego skanowanie w CI/CD.
Uwaga edukacyjna: Traktuj wzorce wyrażeń regularnych jak kod, któremu nie można zaufać. Zasługują na taką samą uwagę jak kod SQL czy wykonywanie poleceń.
Jak Xygeni wykrywa ryzykowne użycie wyrażeń regularnych w języku C#
Xygeni Code Security automatycznie wykrywa niebezpieczne wzorce wyrażeń regularnych C# podczas analizy statycznej. Identyfikuje katastrofalne cofanie się, pominięte przekroczenia limitu czasu i wzorce, które mogą powodować zawieszenie usług. In CI/CD, Xygeni działa jako Brama DevSecOps, blokując niebezpieczne wyrażenia regularne dla języka C# przed ich scaleniem lub wdrożeniem.
Uwaga edukacyjna: Integracja Xygeni gwarantuje bezpieczne przetwarzanie wyrażeń regularnych w różnych kompilacjach i środowiskach, zapobiegając regresjom i narażeniu na ataki DoS przed wdrożeniem.
Twoje wyrażenie regularne jest potężne. Upewnij się, że nie jest bronią.
Luki w zabezpieczeniach ReDoS sprawiają, że niewinnie wyglądające wyrażenia regularne w języku C# stają się bronią umożliwiającą odmowę usługi. Niebezpieczne wyrażenia regularne dla wzorców języka C# są częstym przeoczeniem, dopóki nie zamrożą produkcji lub nie zostaną przerwane CI/CD.
Uczyń bezpieczeństwo wyrażeń regularnych częścią higieny kodowania:
- Zawsze stosuj limity czasu.
- Unikaj zagnieżdżonych kwantyfikatorów.
- Ogranicz wprowadzanie danych przez użytkownika.
- Zautomatyzuj kontrole za pomocą Xygeni Code Security.
Wyrażenia regularne zawsze będą potężne, ale jeśli zostaną starannie zaprojektowane, Twoje wzorce wyrażeń regularnych w języku C# nie staną się kolejnym raportem o incydencie.





