рэгулярны выраз 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"); 

Адукацыйная заўвага: Заўсёды выкарыстоўвайце тайм-аўты (Параметры рэгулярных выразаў + Прамежак часу) і спрасціць укладзеныя групы. У рэгулярных выразах C# праверка прадукцыйнасці з'яўляецца патрабаваннем бяспекі, а не аптымізацыяй.

Чаму шаблоны рэгулярных выразаў C# становяцца ўразлівымі

Неадназначныя квантыфікатары (.*, .+або (а+)+) і неабмежаванае паўтарэнне робяць рэгулярныя выразы распаўсюджанай мішэнню для 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#

Прадухіленне ReDoS у рэгулярных выразах на C# павінна быць убудавана ў вашу распрацоўку, і Працоўны працэс DevSecOps. Вось як зрабіць яго бяспечным па змаўчанні:

Best Practices

  1. Заўсёды ўсталёўвайце тайм-аўты на ўсіх вылічэннях рэгулярных выразаў.
  2. Пазбягайце катастрафічных мадэляў, без укладзеных квантыфікатараў або неадназначных груп.
  3. Абмежаваць памер уводу перад пераходам да рэгулярнага выразу.
  4. Папярэдняя кампіляцыя давераных шаблонаў з RegexOptions.Скампіляваны.
  5. Ачысціць выразы, уведзеныя карыстальнікам або дадайце ў белы спіс дазволеныя шаблоны.

Міні-кантрольны спіс прафілактыкі

  • Праверце кожны рэгулярны выраз на наяўнасць C# у вашай кодавай базе.
  • Ужываць Прамежак часу тайм-аўты паслядоўна.
  • Абмежаваць даўжыню ўваходных дадзеных для API і CI.
  • Праверце прадукцыйнасць рэгулярных выразаў перад выпускам.
  • Аўтаматызаваць статычны рэгулярны выраз сканаванне ў CI/CD.

Адукацыйная заўвага: Разглядайце шаблоны рэгулярных выразаў як ненадзейны код. Яны заслугоўваюць такой жа ўважлівасці, як SQL або выкананне каманд.

Як Xygeni выяўляе рызыкоўнае выкарыстанне рэгулярных выразаў C#

Ксігені Code Security аўтаматычна выяўляе небяспечныя шаблоны рэгулярных выразаў C# падчас статычнага аналізу. Ён вызначае катастрафічныя адкаты, прапушчаныя тайм-аўты і заканамернасці, якія могуць прывесці да завісання сэрвісаў. In CI/CD, Ксігені дзейнічае як а Брама 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-атакі перад разгортваннем.

Ваш рэгулярны выраз магутны, пераканайцеся, што ён не зброя

Уразлівасці ReDoS ператвараюць нявінныя на выгляд рэгулярныя выразы C# у зброю адмовы ў абслугоўванні. Небяспечныя рэгулярныя выразы для шаблонаў C# з'яўляюцца распаўсюджанай памылкай, пакуль яны не завісаюць або не перашкаджаюць працы. CI/CD.

Зрабіце бяспеку рэгулярных выразаў часткай вашай гігіены праграмавання:

  • Заўсёды выкарыстоўвайце тайм-аўты.
  • Пазбягайце ўкладзеных квантыфікатараў.
  • Абмежаваць увод карыстальніка.
  • Аўтаматызуйце праверкі з дапамогай Xygeni Code Security.

Рэгулярныя выразы заўсёды будуць магутнымі, але пры дбайным праектаванні вашы шаблоны рэгулярных выразаў на C# не стануць вашай наступнай справаздачай аб інцыдэнце.

інструменты-для-аналізу-складання-праграмнага ...
Прыярытэзуйце, ліквідуйце і абараняйце свае праграмныя рызыкі
Атрымайце свой бясплатны рахунак.
Не патрабуецца крэдытная карта.

Забяспечце распрацоўку і пастаўку праграмнага забеспячэння

з пакетам прадуктаў Xygeni