Wenn reguläre Ausdrücke der Leistung schaden
Eine einzige Zeile regulärer Ausdrücke in C# kann eine produktive API lahmlegen. Schlecht geschriebene Ausdrücke führen zu katastrophalem Backtracking, verbrauchen unnötig CPU-Zyklen und blockieren Threads. Das ist der klassische Fall. Denial-of-Service-Angriff mit regulären Ausdrücken (ReDoS), ein subtiler, aber gefährlicher Angriffsvektor, der in Ihrem Code versteckt ist.
⚠️Unsicheres Beispiel, nur zu Schulungszwecken. Nicht in der Produktion verwenden.
string pattern = @"(a+)+$"; // Vulnerable regex c#
Regex regex = new Regex(pattern);
bool isMatch = regex.IsMatch("aaaaaaaaaaaaaaaaaaaaaaaa!");
Dieser reguläre Ausdruck für C# leidet unter verschachtelten Quantifizierern, die exponentielles Backtracking verursachen. Eine lange, bösartige Zeichenkette kann einen Endpunkt oder Microservice zum Einfrieren bringen.
Sichere Version:
string pattern = @"^a+$"; // Safe simplified regex for C#
Regex regex = new Regex(pattern, RegexOptions.Compiled, TimeSpan.FromMilliseconds(200));
bool isMatch = regex.IsMatch("aaaaaaaaaaa");
Pädagogischer Hinweis: Verwenden Sie immer Timeouts (RegexOptions + Zeitspanne) und verschachtelte Gruppen vereinfachen. In regulären Ausdrücken in C# ist die Leistungsvalidierung eine Sicherheitsanforderung, keine Optimierung.
Warum C#-Regex-Muster angreifbar werden
Mehrdeutige Quantoren (.*, .+den (a+)+) und unbegrenzte Wiederholungen machen reguläre Ausdrücke zu einem häufigen Ziel von DoS-Angriffen.
Wenn diese in benutzergesteuerten Kontexten auftreten, wie z. B. bei der Eingabevalidierung oder der Protokollanalyse, kann eine einzelne speziell präparierte Nutzlast die CPU monopolisieren.
⚠️Unsicheres Beispiel, nur zu Schulungszwecken. Nicht in der Produktion verwenden.
// 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
Sichere 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");
Pädagogischer Hinweis: Vermeiden Sie mehrdeutige Wiederholungen, beschränken Sie die Eingabegröße und testen Sie die Regex-Performance stets unter Last. Funktionales Code-Snippet, das Timeouts und maximale Eingabelängen als Schutzmechanismen im Produktivbetrieb erzwingt.
Real Impact in APIs und CI/CD Workflows
Unsichere reguläre Ausdrücke in C# beschränken sich nicht auf Validierungsformulare. Entwickler betten Muster in Logfilter, Webhook-Matcher und automatisierte Scans ein. CI/CDEin einziges unsicheres Muster kann den gesamten Prozess zum Stillstand bringen. pipeline.
⚠️Unsicheres Beispiel, nur zu Schulungszwecken. Nicht in der Produktion verwenden.
// 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.
Vom Benutzer bereitgestellte reguläre Ausdrücke werden niemals ohne Validierung oder Timeout-Kontrolle verarbeitet.
Sichere 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 */ }
}
Pädagogischer Hinweis: Externe Regex-Eingaben vor der Ausführung validieren. Explizite Längenprüfungen hinzufügen und Timeouts erzwingen. pipelines.
Sichere Vorgehensweisen zur Verhinderung von C#-Regex-DoS
RedoS-Schutz in regulären Ausdrücken in C# sollte von Anfang an in Ihre Entwicklung integriert werden. DevSecOps-Workflow. So stellen Sie sicher, dass es standardmäßig sicher ist:
Praxisbeispiele
- Immer Timeouts einstellen bei allen Regex-Auswertungen.
- Vermeiden Sie katastrophale Muster, keine verschachtelten Quantoren oder mehrdeutigen Gruppen.
- Eingabegröße begrenzen vor der Übergabe an den regulären Ausdruck.
- Vertrauenswürdige Muster vorkompilieren und RegexOptions.Compiled.
- Benutzereingaben bereinigen oder auf eine Whitelist für zulässige Muster setzen.
Mini-Checkliste zur Prävention
- Überprüfen Sie jeden regulären Ausdruck auf seine Verwendung in C# in Ihrer Codebasis.
- Tragen Sie Zeitspanne Regelmäßige Auszeiten.
- Beschränken Sie die Eingabelängen für API- und CI-Eingaben.
- Regex-Performance vor der Veröffentlichung testen.
- Automatisieren Sie statische reguläre Ausdrücke Einscannen CI/CD.
Pädagogischer Hinweis: Reguläre Ausdrücke sollten wie nicht vertrauenswürdiger Code behandelt werden. Sie verdienen die gleiche Sorgfalt wie SQL-Anweisungen oder die Ausführung von Befehlen.
Wie Xygeni riskante C#-Regex-Nutzung erkennt
Xygeni Code Security Erkennt automatisch unsichere reguläre Ausdrücke in C# während der statischen Analyse. Es erkennt katastrophale Rückverfolgungen, verpasste Timeouts und Muster, die wahrscheinlich zum Absturz von Diensten führen. In CI/CD, Xygeni wirkt als DevSecOps-Tor, Blockierung unsicherer regulärer Ausdrücke für C# vor dem Zusammenführen oder Bereitstellen.
# Never expose real tokens, credentials, or internal URLs in pipelines
- name: Regex Safety Scan
run: dotnet xygeni validate --rules regex ,performance --fail-on-risk
Pädagogischer Hinweis: Durch die Integration von Xygeni wird eine sichere Handhabung regulärer Ausdrücke über verschiedene Builds und Umgebungen hinweg gewährleistet, wodurch Regressionen und DoS-Angriffe vor der Bereitstellung verhindert werden.
Dein regulärer Ausdruck ist mächtig, sorge dafür, dass er nicht missbraucht wird.
ReDoS-Schwachstellen verwandeln harmlos aussehende C#-Regex in eine Denial-of-Service-Waffe. Unsichere reguläre Ausdrücke für C#-Muster sind ein häufiges Versäumnis, bis sie die Produktion lahmlegen oder Fehler verursachen. CI/CD.
Machen Sie die Sicherheit regulärer Ausdrücke zu einem festen Bestandteil Ihrer Programmierhygiene:
- Verwenden Sie immer Timeouts.
- Vermeiden Sie verschachtelte Quantoren.
- Benutzereingaben einschränken.
- Automatisieren Sie Prüfungen mithilfe von Xygeni Code Security.
Reguläre Ausdrücke werden immer mächtig sein, aber mit sorgfältiger Gestaltung werden Ihre regulären C#-Muster nicht zu Ihrem nächsten Sicherheitsvorfall.





