c# regex - regex för c# - regex c#

C# Regex DoS: När mönster blir attackvektorer

När reguljära uttryck vänder mot prestanda  

En enda rad med C# regex kan få ett produktions-API att gå på knä. Dåligt skrivna mönster utlöser katastrofala backtracking, brinnande CPU-cykler och låsande trådar. Detta är den klassiska Denial of Service för reguljära uttryck (ReDoS), en subtil men farlig attackvektor gömd i din kod.

⚠️Osäkert exempel, endast för utbildningsändamål. Använd inte i produktion.

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

Denna regex för C# lider av kapslade kvantifierare som orsakar exponentiell backtracking. En lång, skadlig sträng kan frysa en slutpunkt eller mikrotjänst.

Säker version:

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

Utbildningsanmärkning: Använd alltid timeouts (Regexalternativ + Tidsrymd) och förenkla kapslade grupper. I regex C# är prestandavalidering ett säkerhetskrav, inte en optimering.

Varför C# Regex-mönster blir sårbara

Tvetydiga kvantifierare (.*, .+, eller (a+)+) och obegränsad repetition gör regex till ett vanligt DoS-mål.
När dessa förekommer i användardrivna sammanhang, som indatavalidering eller loggparsning, kan en enda skapad nyttolast monopolisera CPU:n.

⚠️Osäkert exempel, endast för utbildningsändamål. Använd inte i produktion.

// 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 

Säker version:

// 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"); 

Utbildningsanmärkning: Undvik tvetydig upprepning, begränsa inmatningsstorleken och jämför alltid regex-prestanda under belastning. Funktionellt snippet, framtvinga timeouts och maximal indatalängd som guards i produktion.

Verklig inverkan i API:er och CI/CD Arbetsflöden

Osäker regex för C# är inte begränsad till valideringsformulär. Utvecklare bäddar in mönster i loggfilter, webhook-matchare och automatiserade skanningar. CI/CD, ett osäkert mönster kan stoppa hela pipeline.

⚠️Osäkert exempel, endast för utbildningsändamål. Använd inte i produktion.

// 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.

Bearbeta aldrig användarlevererade regex utan validering eller timeout-kontroll.

Säker version:

// 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 */ } } 

Utbildningsanmärkning: Validera extern regex-inmatning före körning. Lägg till explicita längdkontroller och framtvinga timeouts i pipelines.

Säkra metoder för att förhindra C# Regex DoS

ReDoS-förebyggande åtgärder i regex C# bör integreras i din utveckling och DevSecOps-arbetsflöde. Så här gör du det säkert som standard:

Best Practices

  1. Ställ alltid in timeouts på alla regex-utvärderingar.
  2. Undvik katastrofala mönster, inga kapslade kvantifierare eller tvetydiga grupper.
  3. Begränsa inmatningsstorleken innan den går över till regex.
  4. Förkompilera betrodda mönster med RegexOptions.Kompilerad.
  5. Sanera användarlevererade uttryck eller vitlista tillåtna mönster.

Mini-förebyggande checklista

  • Granska varje regex för C#-användning i din kodbas.
  • Ansök Tidsrymd timeouts konsekvent.
  • Begränsa ingångslängderna på API- och CI-ingångar.
  • Testa regex-prestanda före lansering.
  • Automatisera statisk regex skanning in CI/CD.

Utbildningsanmärkning: Behandla regex-mönster som otillförlitlig kod. De förtjänar samma granskning som SQL eller kommandokörning.

Hur Xygeni upptäcker riskabel C# Regex-användning

Xygeni Code Security upptäcker automatiskt osäkra regex C#-mönster under statisk analys. Den identifierar katastrofala bakåtsträningar, missade timeouts och mönster som sannolikt hänger sig i tjänster. In CI/CD, Xygeni fungerar som en DevSecOps-grind, vilket blockerar osäker regex för C# innan den sammanfogas eller distribueras.

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

Utbildningsanmärkning: Integrering av Xygeni säkerställer säker hantering av regex mellan olika versioner och miljöer, vilket förhindrar regressioner och DoS-exponering före distribution.

Din Regex är kraftfull, se till att den inte är beväpnad

ReDoS-sårbarheter förvandlar oskyldigt utseende C# regex till ett denial-of-service-vapen. Osäkra regex för C#-mönster är ett vanligt misstag, tills de fryser produktionen eller går sönder CI/CD.

Gör regex-säkerhet till en del av din kodningshygien:

  • Använd alltid timeouts.
  • Undvik kapslade kvantifierare.
  • Begränsa användarinmatning.
  • Automatisera kontroller med hjälp av Xygeni Code Security.

Regex kommer alltid att vara kraftfullt, men med noggrann design kommer dina regex C#-mönster inte att bli din nästa incidentrapport.

sca-tools-programvara-verktyg-för-kompositionsanalys
Prioritera, åtgärda och säkra dina programvarurisker
Skaffa ditt gratiskonto.
Inga kreditkort krävs.

Säkra din programvaruutveckling och leverans

med Xygeni-produktsviten