وقتی عبارات منظم (Regular Expressions) عملکرد را مختل میکنند
یک خط regex در سی شارپ میتواند یک API عملیاتی را به زانو درآورد. الگوهای ضعیف نوشته شده باعث ایجاد backtracking فاجعهبار، سوزاندن چرخههای CPU و قفل شدن threadها میشوند. این یک نمونه کلاسیک است. حملات انکار سرویس با عبارات منظم (ReDoS)، یک بردار حملهی ظریف اما خطرناک که در کد شما پنهان شده است.
⚠️مثال ناامن، فقط برای اهداف آموزشی. در محیط عملیاتی استفاده نشود.
این عبارت منظم برای C# از کمیتسنجهای تودرتو رنج میبرد که باعث بازگشت نمایی میشوند. یک رشته طولانی و مخرب میتواند یک نقطه پایانی یا میکروسرویس را مسدود کند.
نسخه امن:
نکته آموزشی: همیشه از وقفههای زمانی استفاده کنید (گزینههای منظم + مدت زمان) و گروههای تو در تو را ساده کنید. در regex c#، اعتبارسنجی عملکرد یک الزام امنیتی است، نه یک بهینهسازی.
چرا الگوهای Regex در سی شارپ آسیبپذیر میشوند؟
کمیتسنجهای مبهم (.*, .+، یا (a+)+) و تکرار نامحدود، regex را به یک هدف رایج DoS تبدیل میکند.
وقتی این موارد در زمینههای کاربرمحور، مانند اعتبارسنجی ورودی یا تجزیه لاگ، ظاهر میشوند، یک payload ساختهشده میتواند CPU را به انحصار خود درآورد.
⚠️مثال ناامن، فقط برای اهداف آموزشی. در محیط عملیاتی استفاده نشود.
نسخه امن:
نکته آموزشی: از تکرار مبهم خودداری کنید، اندازه ورودی را محدود کنید و همیشه عملکرد regex را تحت بار ارزیابی کنید. قطعه کد تابعی، اعمال وقفههای زمانی و حداکثر طول ورودی به عنوان محافظ در محیط عملیاتی.
تأثیر واقعی در APIها و CI/CD گردش کار
regex ناامن برای C# محدود به فرمهای اعتبارسنجی نیست. توسعهدهندگان الگوها را در فیلترهای گزارش، تطبیقدهندههای وبهوک و اسکنهای خودکار جاسازی میکنند. CI/CDیک الگوی ناامن میتواند کل سیستم را متوقف کند pipeline.
⚠️مثال ناامن، فقط برای اهداف آموزشی. در محیط عملیاتی استفاده نشود.
هرگز عبارات منظم ارائه شده توسط کاربر را بدون اعتبارسنجی یا کنترل زمان انقضا پردازش نکنید.
نسخه امن:
نکته آموزشی: ورودیهای خارجی با عبارات منظم را قبل از اجرا اعتبارسنجی کنید. بررسیهای طول صریح را اضافه کنید و مهلتهای زمانی را اعمال کنید. pipelines.
روشهای ایمن برای جلوگیری از DoS در زبان برنامهنویسی با عبارات منظم در C#
پیشگیری از ReDoS در regex c# باید در توسعه شما گنجانده شود و گردش کار DevSecOps. در اینجا نحوه ایمن سازی آن به صورت پیش فرض آورده شده است:
بهترین روش
- همیشه مهلتهای زمانی را تنظیم کنید در تمام ارزیابیهای regex.
- از الگوهای فاجعهبار دوری کنید، بدون کمیتسنجهای تودرتو یا گروههای مبهم.
- محدود کردن اندازه ورودی قبل از انتقال به regex.
- پیش کامپایل الگوهای قابل اعتماد با RegexOptions.کامپایل شده.
- پاکسازی عبارات ارائه شده توسط کاربر یا الگوهای مجاز را در لیست سفید قرار دهید.
چک لیست پیشگیرانه کوچک
- هر عبارت منظم (regex) را برای استفاده از سی شارپ در کدبیس خود بررسی کنید.
- درخواست مدت زمان وقفهها به طور مداوم.
- طول ورودیها را در ورودیهای API و CI محدود کنید.
- قبل از انتشار، عملکرد regex را آزمایش کنید.
- خودکارسازی عبارات منظم ایستا اسکن کردن در CI/CD.
نکته آموزشی: الگوهای regex را به عنوان کد غیرقابل اعتماد در نظر بگیرید. آنها سزاوار همان بررسی دقیق SQL یا اجرای دستور هستند.
چگونه Xygeni استفاده پرخطر از عبارات منظم در C# را تشخیص میدهد
شیگنی Code Security به طور خودکار الگوهای ناامن regex C# را در طول تحلیل استاتیک تشخیص میدهد. این ابزار، عقبگردهای فاجعهبار، وقفههای از دست رفته و الگوهایی که احتمالاً باعث هنگ کردن سرویسها میشوند را شناسایی میکند. In CI/CD, شیگنی به عنوان یک عمل می کند دروازه DevSecOps، مسدود کردن regex ناامن برای C# قبل از ادغام یا استقرار آن.
نکته آموزشی: ادغام Xygeni، مدیریت امن regex را در بین ساختارها و محیطها تضمین میکند و از رگرسیونها و قرار گرفتن در معرض DoS قبل از استقرار جلوگیری میکند.
Regex شما قدرتمند است، مطمئن شوید که به سلاح تبدیل نشده است
آسیبپذیریهای ReDoS، regexهای به ظاهر بیخطر C# را به سلاحی برای حملات انکار سرویس تبدیل میکنند. الگوهای regex ناامن برای C# یک اشتباه رایج هستند، تا زمانی که تولید را متوقف کنند یا از کار بیفتند. CI/CD.
امنیت regex را بخشی از اصول کدنویسی خود قرار دهید:
- همیشه از وقفههای زمانی استفاده کنید.
- از کمیتسنجهای تودرتو اجتناب کنید.
- ورودی کاربر را محدود کنید.
- خودکارسازی بررسیها با استفاده از Xygeni Code Security.
Regex همیشه قدرتمند خواهد بود، اما با طراحی دقیق، الگوهای regex C# شما به گزارش حادثه بعدی شما تبدیل نخواهند شد.





