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
- Angi alltid tidsavbrudd på alle regex-evalueringer.
- Unngå katastrofale mønstre, ingen nestede kvantifikatorer eller tvetydige grupper.
- Begrens inndatastørrelse før den går over til regex.
- Forkompiler klarerte mønstre med RegexOptions.Compiled.
- 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.







