Když regulární výrazy negativně ovlivňují výkon
Jediný řádek regulárního výrazu v jazyce C# může srazit produkční API na kolena. Špatně napsané vzory způsobují katastrofické backtracking, vyčerpávání cyklů CPU a zamykání vláken. Toto je klasika. Odmítnutí služby regulárních výrazů (ReDoS), což je nenápadný, ale nebezpečný útočný vektor skrytý ve vašem kódu.
⚠️Nezabezpečený příklad, pouze pro vzdělávací účely. Nepoužívejte v produkčním prostředí.
Tento regulární výraz pro C# trpí vnořenými kvantifikátory, které způsobují exponenciální zpětné sledování. Dlouhý, škodlivý řetězec může zamrznout koncový bod nebo mikroslužbu.
Bezpečná verze:
Poznámka k vzdělání: Vždy používejte časové limity (RegexOptions + Časové rozpětí) a zjednodušit vnořené skupiny. V regexu C# je validace výkonu bezpečnostním požadavkem, nikoli optimalizací.
Proč se vzory regulárních výrazů v C# stávají zranitelnými
Nejednoznačné kvantifikátory (.*, .+nebo (a+)+) a neomezené opakování dělají z regulárních výrazů běžný cíl DoS.
Když se tyto funkce objeví v kontextech řízených uživatelem, jako je ověřování vstupu nebo analýza protokolu, může jeden vytvořený datový obsah monopolizovat CPU.
⚠️Nezabezpečený příklad, pouze pro vzdělávací účely. Nepoužívejte v produkčním prostředí.
Bezpečná verze:
Poznámka k vzdělání: Vyhněte se nejednoznačnému opakování, omezte velikost vstupu a vždy porovnávajte výkon regulárních výrazů při zátěži. Funkční úryvek, vynucování časových limitů a maximální délky vstupu jako ochranných prvků v produkčním prostředí.
Skutečný dopad na API a CI/CD Pracovní postupy
Nebezpečný regulární výraz pro C# se neomezuje pouze na ověřovací formuláře. Vývojáři vkládají vzory do filtrů protokolů, porovnávačů webhooků a automatizovaných skenů. CI/CD, jeden nebezpečný vzorec může zastavit celý pipeline.
⚠️Nezabezpečený příklad, pouze pro vzdělávací účely. Nepoužívejte v produkčním prostředí.
Nikdy nezpracovávejte uživatelem zadaný regulární výraz bez ověření nebo kontroly časového limitu.
Bezpečná verze:
Poznámka k vzdělání: Ověřte vstup externího regulárního výrazu před spuštěním. Přidejte explicitní kontroly délky a vynuťte časové limity v pipelines.
Bezpečné postupy pro prevenci DoS v C# s regexy
Prevence ReDoS v regexu C# by měla být integrována do vašeho vývoje a Pracovní postup DevSecOps. Zde je návod, jak to ve výchozím nastavení zabezpečit:
Doporučené postupy
- Vždy nastavit časové limity u všech vyhodnocení regulárních výrazů.
- Vyhněte se katastrofickým vzorcům, žádné vnořené kvantifikátory ani nejednoznačné skupiny.
- Omezení velikosti vstupu před přechodem k regulárnímu výrazu.
- Předkompilace důvěryhodných vzorů s RegexOptions.Compiled.
- Opravte výrazy zadané uživatelem nebo přidat na bílou listinu povolené vzory.
Mini preventivní kontrolní seznam
- Zkontrolujte každý regulární výraz, zda ve vaší kódové základně nepoužívá jazyk C#.
- Přihláška Časové rozpětí časové limity důsledně.
- Omezte délku vstupů API a CI.
- Před vydáním otestujte výkon regulárních výrazů.
- Automatizace statických regulárních výrazů skenování v CI/CD.
Poznámka k vzdělání: Vzory regulárních výrazů považujte za nedůvěryhodný kód. Zaslouží si stejnou kontrolu jako SQL nebo provádění příkazů.
Jak Xygeni detekuje riskantní použití regexů v C#
Xygeni Code Security automaticky detekuje nebezpečné vzory regulárních výrazů v jazyce C# během statické analýzy. Identifikuje katastrofické zpětné sledování, chybějící časové limity a vzorce, které pravděpodobně vedou k zablokování služeb. In CI/CD, Xygeni funguje jako Brána DevSecOps, blokování nebezpečných regulárních výrazů pro C# před jejich sloučením nebo nasazením.
Poznámka k vzdělání: Integrace Xygeni zajišťuje bezpečné zpracování regulárních výrazů napříč sestaveními a prostředími a zabraňuje regresím a DoS útokům před nasazením.
Váš regulární výraz je mocný, ujistěte se, že není zbraňovaný.
Zranitelnosti ReDoS proměňují nevinně vypadající regulární výrazy v C# v zbraň bránící útokům typu „donikání služby“. Nebezpečné regulární výrazy pro vzory C# jsou běžným přehlédnutím, dokud nezaseknou produkci nebo se nepřeruší. CI/CD.
Začleňte bezpečnost regulárních výrazů do svého kódovacího hygienického postupu:
- Vždy používejte časové limity.
- Vyhněte se vnořeným kvantifikátorům.
- Omezte vstup uživatele.
- Automatizujte kontroly pomocí Xygeni Code Security.
Regex bude vždycky mocný, ale s pečlivým návrhem se vaše vzory regexů v C# nestanou vaším dalším hlášením incidentu.





