c# регекс - регекс за c# - регекс c#

C# Regex DoS: Когато шаблоните се превърнат във вектори на атака

Когато регулярните изрази се обърнат срещу производителността  

Един-единствен ред от регулярния израз в C# може да срине производствения API. Лошо написаните шаблони предизвикват катастрофално връщане назад, изгаряне на процесорни цикли и заключване на нишки. Това е класиката. Отказ на услуга чрез регулярни изрази (ReDoS), фин, но опасен вектор на атака, скрит във вашия код.

⚠️Несигурен пример, само за образователни цели. Не използвайте в продукция.

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

Този регулярен израз за C# страда от вложени квантификатори, които причиняват експоненциално връщане назад. Дълъг, злонамерен низ може да замрази крайна точка или микросървис.

Защитена версия:

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

Образователна бележка: Винаги използвайте таймаути (Опции за регулярни изрази + Период от време) и опростяване на вложени групи. В regex c#, валидирането на производителността е изискване за сигурност, а не оптимизация.

Защо C# Regex шаблоните стават уязвими

Нееднозначни квантификатори (.*, .+ или (а+)+) и неограниченото повторение правят регулярните изрази често срещана DoS цел.
Когато те се появяват в потребителски контексти, като например валидиране на входни данни или парсиране на лог файлове, един-единствен създаден полезен товар може да монополизира процесора.

⚠️Несигурен пример, само за образователни цели. Не използвайте в продукция.

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

Защитена версия:

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

Образователна бележка: Избягвайте двусмислени повторения, ограничете размера на входните данни и винаги сравнявайте производителността на регулярните изрази под натоварване. Функционален фрагмент, налагащ времеви ограничения и максимална дължина на входа като предпазители в продукцията.

Реално въздействие върху API и CI/CD Работни потоци

Небезопасните регулярни изрази за C# не се ограничават само до формуляри за валидиране. Разработчиците вграждат шаблони във филтри за логове, съпоставители на уеб куки и автоматизирани сканирания. CI/CD, един опасен модел може да спре целия pipeline.

⚠️Несигурен пример, само за образователни цели. Не използвайте в продукция.

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

Никога не обработвайте предоставени от потребителя регулярни изрази без валидиране или контрол на времето за изчакване.

Защитена версия:

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

Образователна бележка: Валидирайте външния регулярен израз преди изпълнение. Добавете изрични проверки за дължина и наложете времеви ограничения в pipelines.

Безопасни практики за предотвратяване на DoS от C# Regex

Предотвратяването на ReDoS в regex c# трябва да бъде вградено във вашата разработка и Работен процес на DevSecOps. Ето как да го направите безопасно по подразбиране:

Най-добри практики

  1. Винаги задавайте време за изчакване при всички оценки на регулярни изрази.
  2. Избягвайте катастрофални модели, без вложени квантификатори или двусмислени групи.
  3. Ограничаване на входния размер преди да се премине към регекс.
  4. Предкомпилиране на надеждни модели с RegexOptions.Compiled.
  5. Почистване на изрази, предоставени от потребителя или разрешени модели в белия списък.

Мини превантивен контролен списък

  • Прегледайте всеки регулярен израз за употреба на C# във вашата кодова база.
  • Кандидатствай Период от време таймаутите последователно.
  • Ограничете дължината на входните данни за API и CI.
  • Тествайте производителността на регулярните изрази преди пускането им.
  • Автоматизиране на статични регулярни изрази сканиране в CI/CD.

Образователна бележка: Третирайте шаблоните за регулярни изрази като ненадежден код. Те заслужават същото внимание като SQL или изпълнението на команди.

Как Xygeni открива рискова употреба на регулярни изрази в C#

Ксигени Code Security автоматично открива опасни шаблони на регулярни изрази в C# по време на статичен анализ. Той идентифицира катастрофални връщания назад, липсващи таймаути и модели, които е вероятно да замразят услугите. In CI/CD, Ксигени действа като a DevSecOps порта, блокирайки опасни регулярни изрази за C#, преди да се слеят или разгърнат.

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

Образователна бележка: Интегрирането на Xygeni осигурява сигурна обработка на регулярни изрази в различни компилации и среди, предотвратявайки регресии и излагане на DoS преди внедряването.

Вашият Regex е мощен, уверете се, че не е оръжие

Уязвимостите на ReDoS превръщат невинно изглеждащите регулярни изрази в C# в оръжие за отказ от услуга. Небезопасните регулярни изрази за C# шаблони са често срещан пропуск, докато не замразят производството или не прекъснат работата. CI/CD.

Направете безопасността на регулярните изрази част от хигиената на кодирането си:

  • Винаги използвайте таймаути.
  • Избягвайте вложени квантификатори.
  • Ограничете потребителския вход.
  • Автоматизирайте проверките с помощта на Xygeni Code Security.

Regex винаги ще бъде мощен, но с внимателно проектиране, вашите C# шаблони за regex няма да се превърнат в следващия ви доклад за инцидент.

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni