Найдорожчі атаки часто не використовують жодної технічної вразливості: зловмисник просто викликає легітимну функцію у масштабі, на який бізнес не розраховував.
Типові сценарії:
- SMS-накрутка (SMS pumping, toll fraud): бот запитує коди підтвердження на тисячі номерів у дорогих напрямках. Оператор, з яким у змові зловмисник, ділиться з ним виручкою, а застосунок платить за кожне SMS - рахунок на тисячі доларів за ніч;
- промокоди й пробні періоди: тисячі реєстрацій для одноразової знижки чи безкоштовного тарифу;
- реферальні бонуси: ферми акаунтів запрошують одна одну;
- скупка дефіцитного товару ботами, автоматичне бронювання без оплати;
- збір даних: перебір публічних профілів чи цін конкурентами.
Чому звичайне обмеження частоти не допомагає: ліміт «5 запитів на хвилину з IP» обходиться ротацією тисяч IP з резидентних проксі, а ліміт на акаунт - створенням нових акаунтів.
Багаторівневий захист:
| Рівень | Що обмежує |
|---|---|
| IP і підмережа | грубі атаки з одного джерела |
| акаунт | дії одного користувача |
| ціль дії | кількість SMS на номер, на префікс країни, на напрямок |
| пристрій чи сесія | відбиток браузера, токен застосунку |
| глобальний бюджет | загальна кількість SMS на годину для всього сервісу |
RateLimiter::for('sms', function (Request $request) {
$phone = (string) $request->input('phone');
return [
Limit::perHour(3)->by('phone:' . $phone),
Limit::perHour(10)->by('ip:' . $request->ip()),
Limit::perHour(500)->by('sms:global'),
];
});
Що ще працює:
- дозволені країни для SMS - лише ті, де справді є користувачі; дорогі міжнародні напрямки вимкнені за замовчуванням;
- бюджети й сповіщення: ліміт витрат у провайдера SMS, алерт при стрибку кількості відправлень;
- дешевша альтернатива SMS: вхід за посиланням на email, TOTP, passkeys;
- тертя для ризикових дій: CAPTCHA чи Turnstile лише після підозрілих ознак, а не для всіх;
- бізнес-правила: промокод прив'язаний до верифікованої картки чи телефону, реферальний бонус - після першої оплати, а не реєстрації;
- затримка винагороди: бонус нараховується через кілька днів, коли шахрайство встигли виявити.
Моніторинг важливіший за правила: метрики на кожну дорогу дію (SMS, бонуси, пробні періоди) з порогами аномалій. Правила зловмисники обходять, а різкий стрибок графіка видно одразу.
Моделювання загроз для нової функції має включати питання «що буде, якщо цю дію викличуть мільйон разів» - разом з питаннями про доступ і валідацію.
Докладніше в документації: OWASP API6:2023 Unrestricted Access to Sensitive Business Flows