Wakati Maneno ya Kawaida Yanapogeuka Dhidi ya Utendaji
Mstari mmoja wa C# regex unaweza kuishusha API ya uzalishaji. Mifumo isiyoandikwa vizuri husababisha kurudi nyuma kwa maafa, kuchoma mizunguko ya CPU, na kufunga nyuzi. Hii ndiyo ya kawaida Kukataliwa kwa Huduma ya Kujieleza Mara kwa Mara (ReDoS), vekta ya mashambulizi isiyoonekana lakini hatari iliyofichwa kwenye msimbo wako.
⚠️Mfano usio salama, kwa madhumuni ya kielimu pekee. Usitumie katika uzalishaji.
string pattern = @"(a+)+$"; // Vulnerable regex c# Regex regex = new Regex(pattern); bool isMatch = regex.IsMatch("aaaaaaaaaaaaaaaaaaaaaaaa!"); Regex hii ya C# inakabiliwa na vihesabu vilivyowekwa ndani ambavyo husababisha kurudi nyuma kwa kielelezo. Mfuatano mrefu, hasidi unaweza kugandisha sehemu ya mwisho au huduma ndogo.
Toleo salama:
string pattern = @"^a+$"; // Safe simplified regex for C# Regex regex = new Regex(pattern, RegexOptions.Compiled, TimeSpan.FromMilliseconds(200)); bool isMatch = regex.IsMatch("aaaaaaaaaaa"); Dokezo la kielimu: Tumia muda wa kuisha kila wakati (Chaguzi za Regex + Muda wa Muda) na kurahisisha vikundi vilivyowekwa kwenye viota. Katika regex c#, uthibitishaji wa utendaji ni sharti la usalama, si uboreshaji.
Kwa Nini Mifumo ya C# Regex Inakuwa Hatarini
Vipimo visivyoeleweka (.*, .+, Au (a+)+) na marudio yasiyo na kikomo hufanya regex kuwa lengo la kawaida la DoS.
Hizi zinapoonekana katika miktadha inayoendeshwa na mtumiaji, kama vile uthibitishaji wa ingizo au uchanganuzi wa kumbukumbu, mzigo mmoja uliotengenezwa unaweza kutawala CPU.
⚠️Mfano usio salama, kwa madhumuni ya kielimu pekee. Usitumie katika uzalishaji.
// 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 Toleo salama:
// 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"); Dokezo la kielimu: Epuka marudio yasiyoeleweka, punguza ukubwa wa ingizo, na kila mara pima utendaji wa regex chini ya mzigo. Kijisehemu kinachofanya kazi, kutekeleza muda wa kuisha na urefu wa juu zaidi wa kuingiza data kama walinzi katika uzalishaji.
Athari Halisi katika API na CI/CD Kazi ya kazi
Regex isiyo salama kwa C# haizuiliwi tu kwa fomu za uthibitishaji. Wasanidi programu hupachika ruwaza katika vichujio vya kumbukumbu, vilinganishi vya webhook, na uchanganuzi otomatiki. CI/CD, muundo mmoja usio salama unaweza kukwamisha yote pipeline.
⚠️Mfano usio salama, kwa madhumuni ya kielimu pekee. Usitumie katika uzalishaji.
// 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.Usiwahi kuchakata regex inayotolewa na mtumiaji bila uthibitisho au udhibiti wa muda wa kuisha.
Toleo salama:
// 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 */ } } Dokezo la kielimu: Thibitisha ingizo la regex la nje kabla ya utekelezaji. Ongeza ukaguzi dhahiri wa urefu na utekeleze muda wa kuisha katika pipelines.
Mbinu Salama za Kuzuia C# Regex DoS
Kinga ya ReDoS katika regex c# inapaswa kuzingatiwa katika ukuaji wako na Mtiririko wa kazi wa DevSecOps. Hivi ndivyo unavyoweza kuifanya iwe salama kwa chaguo-msingi:
Best Practices
- Weka muda wa kuisha kila wakati kwenye tathmini zote za regex.
- Epuka mifumo ya janga, hakuna vihesabu vilivyowekwa ndani au vikundi visivyoeleweka.
- Punguza ukubwa wa ingizo kabla ya kuhamisha hadi regex.
- Kusanya ruwaza zinazoaminika mapema na Chaguzi za Regex. Zilizokusanywa.
- Safisha misemo inayotolewa na mtumiaji au mifumo iliyoidhinishwa kwenye orodha nyeupe.
Orodha ndogo ya kuzuia
- Kagua kila regex kwa matumizi ya C# katika mfumo wako wa msimbo.
- Kuomba Muda wa Muda muda wa kuisha mara kwa mara.
- Punguza urefu wa ingizo kwenye ingizo za API na CI.
- Jaribu utendaji wa regex kabla ya kutolewa.
- Rejeksi tuli kiotomatiki kuchanganua ndani CI/CD.
Dokezo la kielimu: Chukulia mifumo ya regex kama msimbo usioaminika. Inastahili uchunguzi sawa na SQL au utekelezaji wa amri.
Jinsi Xygeni Hugundua Matumizi Hatari ya Regex ya C#
Xygeni Code Security hugundua kiotomatiki ruwaza zisizo salama za regex C# wakati wa uchanganuzi tuli. Inatambua matukio mabaya ya kurudi nyuma, muda unaopotea, na mifumo inayoweza kuathiri huduma. In CI/CD, Xygeni hufanya kama Lango la DevSecOps, kuzuia regex isiyo salama kwa C# kabla haijaunganishwa au kusambazwa.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Regex Safety Scan run: dotnet xygeni validate --rules regex ,performance --fail-on-riskDokezo la kielimu: Kuunganisha Xygeni huhakikisha utunzaji salama wa regex katika miundo na mazingira, kuzuia kurudi nyuma na mfiduo wa DoS kabla ya kutekelezwa.
Regex Yako Ina Nguvu, Hakikisha Haijatumiwa kwa Silaha
Udhaifu wa ReDoS hubadilisha regex ya C# inayoonekana kuwa haina hatia kuwa silaha ya kukataa huduma. Regex isiyo salama kwa mifumo ya C# ni jambo la kawaida kupuuzwa, hadi itakapoganda uzalishaji au kuvunjika. CI/CD.
Fanya usalama wa regex kuwa sehemu ya usafi wako wa msimbo:
- Tumia muda wa kuisha kila wakati.
- Epuka vipimo vilivyowekwa kwenye kiota.
- Zuia uingizaji wa mtumiaji.
- Hundi otomatiki kwa kutumia Xygeni Code Security.
Regex itakuwa na nguvu kila wakati, lakini kwa muundo makini, mifumo yako ya regex C # haitakuwa ripoti yako inayofuata ya tukio.






