برداشت بیش از موجودی حساب با درخواستهای موازی (TOCTOU)
Time-of-Check to Time-of-Use: فاصلهی زمانی بین «بررسی موجودی» و «کسر موجودی» قابلبهرهبرداری است.
این یک نمونهی TOCTOU است: کد ابتدا موجودی حساب را میخواند، بررسی میکند کافی است، سپس تراکنش را انجام و موجودی را کسر میکند. اگر بین این دو مرحله زمان کافی برای یک درخواست دوم (که دوباره موجودی اولیهی هنوز-کسر-نشده را میبیند) وجود داشته باشد، میتوان با چند درخواست موازی، چندین برابر موجودی واقعی برداشت کرد.
چرا در دنیای واقعی مهم است
این دقیقاً همان کلاس باگی است که در چند مورد واقعی کیف پول دیجیتال و سیستم امتیازدهی منجر به خسارت مالی قابلتوجه شده است.
راهحل
تمام عملیات «بررسی و تغییر موجودی» باید در یک تراکنش دیتابیسی اتمیک با قفل مناسب (یا با constraint سطح دیتابیس که مقدار منفی را رد کند) انجام شود.