Почему атака на одного арендатора бьёт по всем
Клиентские поддомены вида client.example.app и собственные домены клиентов обслуживаются одними и теми же серверами и базой. Флуд по одному из них расходует общий пул соединений и воркеров, и замедляются все. Поэтому фильтр различает домены: режим атаки и ужесточённые лимиты включаются для атакованного клиента, а остальные продолжают работать в обычном режиме.
Эндпоинты, которые стоят дороже всего
| Операция | Пример пути | Чем ограничить |
|---|---|---|
| Отчёты и аналитика | /api/reports/* | Отдельный лимит на пользователя и на арендатора |
| Экспорт и импорт | /api/export, /api/import | Несколько запусков в минуту, остальное — ответ 429 |
| Генерация документов | /api/documents/render | Лимит по ключу API, очередь на стороне приложения |
| Полнотекстовый поиск | /api/search | Лимит на сессию, кэш частых запросов |
| Регистрация пробного периода | /signup | Проверка браузера, лимит по источнику и домену почты |
Порядок подключения
- Подключить основной домен и шаблон для клиентских поддоменов.
- Включить лимиты по ключу API и пользователю, отдельно — на тяжёлые методы.
- Защитить вход и регистрацию от перебора и массовых регистраций ради бесплатного доступа.
- Проверить, что режим атаки можно включить для одного клиентского домена, не затрагивая остальных.
- Подключить уведомления и выгрузку статистики из журналов.
Чего не делать
- Не включать проверку браузера на
/api/*: интеграции клиентов, мобильные приложения и скрипты не выполняют JavaScript и начнут получать ошибки. - Не забывать о входящих вебхуках платёжных систем и партнёров — для них нужны исключения по адресам или секретному заголовку.
- Не ставить единый лимит на весь API: один крупный клиент с интеграцией легко упрётся в него в обычный рабочий день.
Данные для разговора с клиентом
Когда клиент спрашивает, почему вчера тормозил сервис, лучший ответ — хронология из журнала: когда вырос поток запросов к его домену, какое правило сработало и как вела себя нагрузка на ваш сервер. Такую выгрузку можно приложить к отчёту по SLA.
Вопросы и ответы
Можно ли подключить собственные домены клиентов?
Да, каждый домен подключается со своим сертификатом и наследует общие правила. Для отдельного клиента их можно ужесточить.
Как отличить атаку на API от интеграции, которую клиент написал с ошибкой?
По журналу: у интеграции один ключ API и повторяющийся метод, у атаки — множество источников. Для первой хватает лимита и письма клиенту, для второй нужен режим атаки.
Читайте также
- ВозможностиЗащита API от DDoS, ботов и злоупотребленийЛимиты по ключам, схема запросов, защита мобильных приложений
- АтакиАтаки на API: признаки и защитаПерегрузка, перебор и злоупотребление логикой API
- ВозможностиАналитика и журналы атакДашборды, журнал запросов, отчёты и уведомления
- ПлатформыЗащита приложения на LaravelДоверенные прокси, throttle, API и Livewire
- ПлатформыЗащита сайта на Next.js и Node.jsSSR, API-маршруты и Server Actions