🏁 КАК ДВЕ ДЕЙСТВИЯ ЛОМАЮТ ОДНУ ЛОГИКУ
Race condition — это не «редкий баг», а сбой в очередности. Два запроса приходят почти одновременно, оба видят одно и то же состояние, оба считают его доступным — и сервер выполняет их так, будто конфликтов нет.
Для продукта это особенно опасно там, где есть лимиты, деньги, доступы и статусы:
— списание средств;
— активация подписки;
— использование промокода;
— изменение email/пароля;
— бронирование слота.
Уязвимость обычно проявляется в трёх формах:
1) **check-then-act** — сначала проверили, потом сделали; между этими шагами состояние уже изменилось.
2) **double spend / double use** — один ресурс используют дважды: купон, баланс, место.
3) **state desync** — интерфейс показывает одно, сервер считает другое.
Как искать:
— повторяющиеся быстрые действия;
— параллельные запросы;
— разные результаты при одинаковом сценарии;
— места, где бизнес-правило держится на «успели/не успели».
Хороший вопрос для ревью: **что случится, если два пользователя или два клика придут сюда одновременно?**
Если ответ «ничего» — это надо доказать, а не предполагать.
JTBD Notes
@JTBDNotesPro
🏁 КАК ДВЕ ДЕЙСТВИЯ ЛОМАЮТ ОДНУ ЛОГИКУ
Этот пост опубликован в Telegram-канале JTBD Notes. Подписаться можно по ссылке: @JTBDNotesPro.