استفادهی مضاعف از یک کد تخفیف با ارسال همزمان چند درخواست
کلاسیکترین نمونهی Race Condition: ارسال دهها درخواست همزمان برای دور زدن یک محدودیت «فقط یکبار».
اگر بررسی «آیا این کد قبلاً استفاده شده؟» و «ثبت استفادهشدن آن» دو عملیات جدا روی دیتابیس باشند (نه یک تراکنش اتمیک با قفل مناسب)، ارسال همزمان چند درخواست (مثلاً با Burp Turbo Intruder) میتواند باعث شود همهی آنها بررسی اول را «موفق» ببینند، پیش از آنکه هیچکدام فرصت ثبت کرده باشد.
نحوهی تست عملی
- با ابزاری که اجازهی ارسال واقعاً همزمان (نه پیدرپی سریع) درخواستها را میدهد، ۲۰-۵۰ درخواست یکسان را دقیقاً همزمان بفرستید.
- تعداد دفعاتی که عملیات واقعاً اعمال شده را با تعداد مجاز مقایسه کنید.
راهحل
استفاده از قفل دیتابیسی (مثل SELECT ... FOR UPDATE) یا یک constraint یکتا در سطح دیتابیس، بهجای بررسی و ثبت در دو مرحلهی جدا.