c# regex - regex for c# - regex c#

C# Regex DoS: Når mønstre blir angrepsvektorer

Når regulære uttrykk slår mot ytelse  

En enkelt linje med C# regex kan sette et produksjons-API i kne. ​​Dårlig skrevne mønstre utløser katastrofale tilbakefall, brennende CPU-sykluser og låsing av tråder. Dette er den klassiske Tjenestenektelse for regulært uttrykk (ReDoS), en subtil, men farlig angrepsvektor skjult i koden din.

⚠️Usikkert eksempel, kun for pedagogiske formål. Ikke bruk i produksjon.

				
					string pattern = @"(a+)+$";  // Vulnerable regex c#
Regex regex = new Regex(pattern);
bool isMatch = regex.IsMatch("aaaaaaaaaaaaaaaaaaaaaaaa!");

				
			

Denne regexen for C# lider av nestede kvantifikatorer som forårsaker eksponentiell tilbakesporing. En lang, ondsinnet streng kan fryse et endepunkt eller en mikrotjeneste.

Sikker versjon:

				
					string pattern = @"^a+$";  // Safe simplified regex for C#
Regex regex = new Regex(pattern, RegexOptions.Compiled, TimeSpan.FromMilliseconds(200));
bool isMatch = regex.IsMatch("aaaaaaaaaaa");

				
			

Pedagogisk merknad: Bruk alltid timeouts (RegexOptions + Tidsrom) og forenkle nestede grupper. I regex C# er ytelsesvalidering et sikkerhetskrav, ikke en optimalisering.

Hvorfor C# Regex-mønstre blir sårbare

Tvetydige kvantifikatorer (.*, .+eller (a+)+) og ubegrenset repetisjon gjør regex til et vanlig DoS-mål.
Når disse dukker opp i brukerdrevne kontekster, som inputvalidering eller loggparsing, kan én enkeltlaget nyttelast monopolisere CPU-en.

⚠️Usikkert eksempel, kun for pedagogiske formål. Ikke bruk i produksjon.

				
					// Vulnerable email validation regex for C#
var pattern = @"^([a-zA-Z0-9_\-\.]+)@([\w\-]+\.)+([a-zA-Z]{2,4})$";
var input = "a".PadLeft(10000, 'a') + "@example.com";
Regex.IsMatch(input, pattern);  // May hang or cause ReDoS

				
			

Sikker versjon:

				
					// Safer regex c# pattern
var pattern = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
Regex regex = new Regex(pattern, RegexOptions.Compiled, TimeSpan.FromMilliseconds(300));
bool isValid = regex.IsMatch("user@example.com");

				
			

Pedagogisk merknad: Unngå tvetydig repetisjon, begrens inndatastørrelsen og mål alltid regex-ytelsen under belastning. Funksjonelt kodestykke, håndhev tidsavbrudd og maksimal inndatalengde som vakter i produksjon.

Reell innvirkning i API-er og CI/CD Arbeidsflyt

Usikker regex for C# er ikke begrenset til valideringsskjemaer. Utviklere bygger inn mønstre i loggfiltre, webhook-matchere og automatiserte skanninger. CI/CD, ett usikkert mønster kan sette hele pipeline.

⚠️Usikkert eksempel, kun for pedagogiske formål. Ikke bruk i produksjon.

				
					// Regex used to match commit messages in a CI job
var regex = new Regex(userInputPattern);
if (regex.IsMatch(commitMessage)) { /* process */ }
If userInputPattern contains (a+)+$, it can freeze the build agent.
				
			

Behandle aldri brukerangitt regex uten validering eller tidsavbruddskontroll.

Sikker versjon:

				
					// Safe usage in CI/CD context
if (userInputPattern.Length < 100 && !userInputPattern.Contains("++"))
{
    Regex regex = new Regex(userInputPattern, RegexOptions.Compiled, TimeSpan.FromMilliseconds(100));
    if (regex.IsMatch(commitMessage)) { /* safely process */ }
}

				
			

Pedagogisk merknad: Valider ekstern regex-inndata før utførelse. Legg til eksplisitte lengdekontroller og håndhev tidsavbrudd i pipelines.

Sikker praksis for å forhindre C# Regex DoS

ReDoS-forebygging i regex C# bør bygges inn i utviklingen din og DevSecOps-arbeidsflyt. Slik gjør du det trygt som standard:

Beste praksis

  1. Angi alltid tidsavbrudd på alle regex-evalueringer.
  2. Unngå katastrofale mønstre, ingen nestede kvantifikatorer eller tvetydige grupper.
  3. Begrens inndatastørrelse før den går over til regex.
  4. Forkompiler klarerte mønstre med RegexOptions.Compiled.
  5. Rens brukerleverte uttrykk eller hvitliste tillatte mønstre.

Mini-sjekkliste for forebyggende tiltak

  • Gjennomgå alle regex for C#-bruk i kodebasen din.
  • Påfør Tidsrom timeouts konsekvent.
  • Begrens inndatalengdene på API- og CI-inndata.
  • Test ytelsen til regex før utgivelse.
  • Automatiser statisk regex skanning inn CI/CD.

Pedagogisk merknad: Behandle regex-mønstre som upålitelig kode. De fortjener samme gransking som SQL eller kommandokjøring.

Hvordan Xygeni oppdager risikabel bruk av C# Regex

Xygeni Code Security oppdager automatisk usikre regex C#-mønstre under statisk analyse. Den identifiserer katastrofale tilbakeslag, manglende tidsavbrudd og mønstre som sannsynligvis vil henge opp tjenester. In CI/CD, Xygeni fungerer som en DevSecOps-porten, og blokkerer usikker regex for C# før den slås sammen eller distribueres.

				
					# Never expose real tokens, credentials, or internal URLs in pipelines
- name: Regex Safety Scan
  run: dotnet xygeni validate --rules regex ,performance --fail-on-risk
				
			

Pedagogisk merknad: Integrering av Xygeni sikrer sikker håndtering av regex på tvers av bygg og miljøer, og forhindrer regresjoner og DoS-eksponering før utrulling.

Regexen din er kraftig, sørg for at den ikke er bevæpnet

ReDoS-sårbarheter gjør uskyldig utseende C# regex til et tjenestenekthetsvåpen. Usikker regex for C#-mønstre er en vanlig overseelse, helt til de fryser produksjonen eller bryter sammen. CI/CD.

Gjør regex-sikkerhet til en del av kodehygienen din:

  • Bruk alltid timeouts.
  • Unngå nestede kvantifikatorer.
  • Begrens brukerinndata.
  • Automatiser sjekker ved hjelp av Xygeni Code Security.

Regex vil alltid være kraftig, men med nøye design vil ikke regex C#-mønstrene dine bli din neste hendelsesrapport.

sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken