Race Condition — это не «редкий баг», а ошибка синхронизации на уровне обработки запросов.
Схема простая: два запроса попадают в один и тот же участок кода почти одновременно, а сервер не успевает корректно зафиксировать состояние. В итоге оба видят старое значение и оба проходят проверку. Дальше — классика: двойное списание, обход лимита, повторная выдача бонуса, захват чужого ресурса.
Три базовых типа:
1) time-of-check/time-of-use — проверили одно состояние, использовали уже другое;
2) конкуренция за ресурс — два запроса пишут в одну сущность без блокировки;
3) гонка на бизнес-логике — уязвимость появляется не в БД, а в последовательности действий.
Что важно: это не лечится «добавить задержку». Нужны атомарные операции, блокировки, idempotency key, транзакции, корректная сериализация критичных запросов.
Если в системе есть деньги, лимиты, роли или одноразовые действия — race condition надо проверять руками и нагрузкой. Иначе найдёте его не вы, а атакующий.
TechSEO Lab
@TechSEOLabPro
Race Condition — это не «редкий баг», а ошибка синхронизации на уровне обработки запросов.
Этот пост опубликован в Telegram-канале TechSEO Lab. Подписаться можно по ссылке: @TechSEOLabPro.