c# regex - regex dla c# - regex c#

C# Regex DoS: Kiedy wzorce stają się wektorami ataku

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

  1. Zawsze ustawiaj limity czasu przy wszystkich ocenach wyrażeń regularnych.
  2. Unikaj katastroficznych wzorców, bez zagnieżdżonych kwantyfikatorów i grup niejednoznacznych.
  3. Ogranicz rozmiar wejściowy przed przejściem do wyrażenia regularnego.
  4. Prekompiluj zaufane wzorce w OpcjeRegex.Skompilowane.
  5. 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.

sca-tools-oprogramowanie-narzędzia-analizy-kompozycji
Określ priorytety, rozwiąż problemy i zabezpiecz zagrożenia związane z oprogramowaniem
Załóż darmowe konto.
Nie wymagamy karty kredytowej.

Zabezpiecz swoje oprogramowanie i dostarczanie

z pakietem produktów Xygeni