TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 610 subscribers
Post #109 220
#security #bug

دسته بندی Race Conditions

باگ Race Conditions به مشکلاتی در برنامه‌نویسی اشاره دارد که در آن ترتیب اجرای دستورات توسط برنامه توسط عوامل خارجی تعیین می‌شود. این موقعیت‌ها به حمله‌کنندگان اجازه می‌دهند تا در مواقعی که همزمانی اجرای دستورات در حالی که از منابع مشترک استفاده می‌کنند، ضعیفی ایجاد کنند و به نحوی اطلاعات را تغییر دهند یا منابع را دسترسی‌پذیر کنند.

مثال:

فرض کنید یک برنامه ساده با قسمتی برای افزایش موجودی حساب کاربری داریم. این برنامه به گونه‌ای طراحی شده است که هر بار که یک کاربر درخواست افزایش موجودی حساب خود را می‌دهد، برنامه مقدار موجودی حساب را از دیتابیس بخواند، مقدار جدید را محاسبه و سپس در دیتابیس ذخیره کند.

حالا فرض کنید دو کاربر به طور همزمان درخواست افزایش موجودی حساب خود را می‌دهند. در صورتی که برنامه ما قابلیت همزمانی (Concurrency) را به خوبی مدیریت نکند، دو کاربر ممکن است در همان لحظه مقدار موجودی را بخوانند، هر دو مقدار جدید را محاسبه کنند و در نهایت مقدار موجودی را با توجه به محاسبات خود به روزرسانی کنند. اینجاست که Race Conditions ایجاد می‌شود؛ اگر هر دو کاربر به همان زمان به دیتابیس نوشته خود دسترسی داشته باشند، ممکن است یکی از آن‌ها تغییرات دیگری که توسط دیگری انجام داده شده است را پوشش ندهد.

روش‌های جلوگیری:

1- برای عملیات‌هایی که به منابع مشترک دسترسی دارند، مکانیزم‌های به‌روزرسانی انحصاری (Locking) را به‌کار ببرید تا فقط یک نخ اجازه دسترسی و تغییر منبع را داشته باشد.

2- در مواردی که از پایگاه داده استفاده می‌کنید، از تراکنش‌ها برای محدود کردن دسترسی‌ها و به‌روزرسانی‌ها استفاده کنید.

3- از مکانیزم‌های Semaphore و Mutex برای مدیریت دسترسی‌های همزمانی در برنامه‌ها استفاده کنید.

4- در زبان‌های برنامه‌نویسی که از نخ‌ها (Threads) استفاده می‌کنند، از مکانیزم‌های Thread-safe مانند synchronized استفاده کنید.

5- در زبان‌های برنامه‌نویسی که از متغیرهای اتمی پشتیبانی می‌کنند، از آنها برای جلوگیری از مشکلات Race Conditions استفاده کنید.

6- طراحی مناسب و اجرای کد با رعایت اصول همزمانی و به‌روزرسانی منابع مشترک، مشکلات Race Conditions را کاهش می‌دهد.

.
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →