Вразливості бізнес-логіки - кожен запит технічно коректний (правильні типи, валідний токен, без ін'єкцій), але послідовність чи комбінація дій дає результат, якого бізнес не передбачав. Автоматичні сканери шукають відомі шаблони (XSS, SQLi) і не знають правил вашого бізнесу - тому такі помилки знаходять люди.
Типові приклади:
1. Від'ємні й граничні значення:
POST /cart/items {"product_id": 5, "quantity": -3}
Від'ємна кількість зменшує суму замовлення чи повертає гроші на баланс. Те саме з нульовими цінами, дробовими кількостями, величезними числами (переповнення).
2. Довіра даним від клієнта: ціна, знижка чи сума доставки приходять у запиті й використовуються як є, замість обчислення на сервері.
3. Пропуск кроків процесу: оформлення замовлення «адреса → оплата → підтвердження». Запит відразу на крок підтвердження - і замовлення створено без оплати. Сервер має перевіряти стан процесу, а не вірити, що клієнт пройшов попередні кроки.
4. Купони й акції:
- повторне застосування одного купона;
- застосування після зміни кошика (купон «від 1000 грн» лишається після видалення товарів);
- поєднання несумісних знижок;
- реферальні бонуси за самого себе через другий обліковий запис.
5. Гонитва запитів: десять паралельних запитів «застосувати купон» чи «вивести кошти» проходять перевірку одночасно, до того як перший запише результат.
6. Зміна даних після перевірки: спершу підтвердили email, потім змінили на інший - і він вважається підтвердженим.
7. Обхід обмежень через альтернативний шлях: обмеження ліміту в інтерфейсі, але не в API; перевірка у веб-версії, але не в мобільному ендпойнті.
Як захищатися:
- сервер обчислює все важливе: ціни, знижки, суми, доставку - з бази, а не з запиту;
- валідація меж:
'quantity' => ['integer', 'min:1', 'max:100'], перевірка діапазонів для всіх числових полів; - явні стани й переходи для процесів (замовлення, оплата, верифікація) - перевірка поточного стану перед кожним кроком;
- атомарність операцій з балансами й лімітами (транзакції, блокування, унікальні обмеження);
- моделювання загроз для нових функцій: «як цим можна зловживати?» - разом з бізнесом.
Тести на зловживання («що буде, якщо кількість від'ємна», «що, якщо пропустити крок») корисні не менше, ніж тести щасливого шляху.