Технологии

Как защитить API сайта от ботов: rate limiting, токены и контроль дорогих запросов

Практическое руководство по защите API от ботов: как найти дорогие маршруты, выбрать лимиты, сохранить работу клиентов и интеграций и проверить результат без лишних блокировок.

20 октября 202614 мин чтенияКоманда безопасности BotProtection
Термины:

Короткий ответ

Защита API от ботов начинается с карты маршрутов и их стоимости, а не с одного глобального лимита. Разделите публичные, авторизованные и служебные запросы, добавьте проверяемые токены и постепенно вводите rate limiting. Реальные клиенты и интеграции должны сохранять доступ, а подозрительная автоматизация — получать наблюдение, замедление или точечную проверку.

API часто становится самым удобным входом для автоматизации. Бот может не открывать страницы в браузере, а напрямую обращаться к поиску, каталогу, карточкам товаров, форме авторизации или endpoint, который возвращает большой объём данных. Поэтому сайт внешне остаётся доступным, но сервер тратит ресурсы на повторяющиеся операции, аналитика искажается, а настоящие клиенты получают задержки.

В этой статье разберём, как защитить API сайта без хрупкого правила «запретить всё». Методика дополняет анализ access-логов, помогает проверить полезный и вредный бот-трафик и подходит как для магазина, так и для корпоративного сервиса с интеграциями.

1. Составьте карту API до настройки лимитов

Начните с инвентаризации endpoint, а не с настройки случайного числа запросов в минуту. Запишите метод, путь, необходимость авторизации, средний размер ответа, зависимость от базы данных и бизнес-ценность операции. Запрос к статическому справочнику и генерация персональной выдачи могут иметь совершенно разную стоимость для origin.

Матрица API-маршрутов и базовой реакции
МаршрутОсновной рискПервая мераЧто проверить
Каталог и поискПарсинг и дорогие выборкиЛимит по клиенту и маршрутуПоисковый обход, конверсия
АвторизацияПеребор и захват аккаунтовЗамедление и MFA-проверкаОшибки входа, успешные сессии
Формы и заявкиСпам и расход CRMПроверка поведения и дедупликацияДоставленные лиды
Webhook и API партнёровПодделка или всплеск событийПодпись, токен и отдельная квотаПовторы, задержки, SLA

Если документации нет, соберите список по reverse proxy, access-логам и трассировкам приложения. Важно не публиковать секреты в отчёте: токены, cookie и параметры с персональными данными нужно маскировать. Архитектурный контекст можно сопоставить с материалом о reverse proxy и маршрутизации трафика.

2. Используйте несколько сигналов вместо одного IP

IP-адрес полезен для сетевого контекста, но редко является достаточным идентификатором. Общий NAT объединяет реальных пользователей, мобильные сети меняют адреса, а прокси позволяют автоматизации распределять нагрузку. Дополните IP маршрутом, токеном, сессией, User-Agent, частотой, последовательностью действий, кодами ответа и размером ответа.

Сигнал становится сильнее, когда несколько признаков совпадают во времени. Например, последовательное чтение сотен карточек без загрузки связанных ресурсов, одинаковые параметры и отсутствие переходов между этапами могут быть поводом для наблюдения. Но это всё ещё гипотеза: перед блокировкой сопоставьте данные с логами, CRM и реальными сценариями пользователей.

Разделите автоматизацию по назначению

Поисковые роботы, мониторинг, платёжные сервисы и внутренние интеграции могут обращаться к API по легитимной причине. Для них нужны документированные исключения и проверяемая идентификация, а не бесконечный allowlist IP. Для внешних клиентов используйте ограниченные токены, срок действия, отзыв и журналирование. Материал о Googlebot и Яндекс.Боте помогает отдельно проверить SEO-сценарии.

3. Выберите rate limiting по стоимости операции

Лимит должен отвечать на вопрос: какую нагрузку выдерживает маршрут в обычный период, при пике и при деградации зависимостей? Не переносите значение из чужой документации без измерений. Для простого чтения подойдёт более мягкая квота, для поиска по нескольким фильтрам — отдельная стоимость, для отправки формы — ограничение по времени и повторяемости.

Как выбрать реакцию на подозрительный API-трафик
СигналНаблюдениеМягкая реакцияЖёсткая реакция
Короткий всплескПорог и длительностьОчередь или 429 с Retry-AfterТолько при подтверждённом вреде
Повтор одного запросаКэш и доля дублейКэширование и backoffОграничение токена
Много IP, один сценарийПоведенческий кластерChallenge или снижение квотыБлокировка паттерна
Перебор авторизацииОшибки и аккаунтыЗадержка и MFAВременная блокировка

Корректный ответ 429 должен быть понятен клиенту и сопровождаться предсказуемым поведением: заголовком Retry-After, документацией и безопасным повтором. Не превращайте ограничение в 500 или таймаут — так сложнее отличить защиту от поломки. Для критичных операций применяйте идемпотентные ключи, чтобы повтор запроса не создавал второй заказ или платёж.

4. Защитите идентичность клиентов и интеграций

Публичный endpoint должен раскрывать минимум данных и принимать только необходимые параметры. Для партнёрских интеграций закрепите владельца токена, области доступа, срок действия, подпись сообщения и механизм отзыва. Для браузерных сценариев проверьте cookie, CSRF-защиту, CORS и ограничения по origin. Не передавайте секреты в URL, потому что они могут попасть в логи, историю браузера и системы аналитики.

Для формы заявки защита API не заменяет проверку содержимого и контроль CRM. Сопоставляйте запрос с результатом: повторные номера, одинаковые тексты, несуществующие контакты, резкий рост ошибок доставки. Для интернет-магазина этот подход продолжает пошаговый план защиты, а предварительную оценку ущерба можно сделать в калькуляторе потерь от ботов.

5. Вводите правила поэтапно

  1. Наблюдение: записывайте срабатывания без блокировки и соберите базовые значения.
  2. Теневая квота: рассчитывайте, кто превысил бы порог, но не меняйте ответ для клиента.
  3. Мягкая реакция: добавьте 429, backoff, challenge или меньшую квоту только для дорогого маршрута.
  4. Проверка: прогоните контрольные покупки, вход, поиск, webhook и обход публичных страниц.
  5. Откат: заранее назначьте владельца, срок действия правила и понятный способ отключения.

Запускайте изменение на небольшой доле трафика или отдельной группе токенов, если архитектура это позволяет. Сохраняйте версию конфигурации и время включения, чтобы связать эффект с конкретным изменением. Если после правила выросли ошибки клиентов или упала конверсия, сначала откатите узкое изменение, а не добавляйте ещё один исключающий список.

6. Измеряйте результат по доступности и бизнесу

Минимальный мониторинг включает p95/p99 задержки, коды 2xx/4xx/5xx, долю 429, ошибки приложения, нагрузку CPU и базы, очередь фоновых задач и сетевой трафик. Для бизнеса добавьте успешные входы, заявки, оплаты, отмены и качество лидов. Сравнивайте одинаковые периоды и учитывайте сезонность, рекламные кампании и изменения приложения.

Правило проверки: хорошее ограничение уменьшает измеримый вред, не ухудшая контрольные пользовательские сценарии. Если блокировок стало больше, а сайт и продажи не стали стабильнее, настройка требует пересмотра.

Финальный чек-лист защиты API

  • Составлена карта публичных, авторизованных и служебных endpoint.
  • Для маршрутов известны стоимость, допустимая частота и критичные зависимости.
  • Токены ограничены по области, сроку, владельцу и возможности отзыва.
  • Лимиты не завязаны только на IP и учитывают общий NAT и мобильные сети.
  • Для 429 определены Retry-After, backoff и безопасный повтор.
  • Поисковые роботы и важные интеграции проверены до изменения правил.
  • Есть метрики, контрольные сценарии, журнал изменений и план отката.

Если API уже перегружен, начните с диагностики, а не с тотальной блокировки. Сопоставьте access-логи с нагрузкой и CRM, определите самый дорогой маршрут и внесите одно измеримое изменение. Такой путь обычно надёжнее, чем попытка заранее перечислить всех возможных ботов.

Частые вопросы

Нужно ли ограничивать все API-запросы одинаково?

Нет. Лимит должен учитывать стоимость маршрута, тип клиента, авторизацию, размер ответа и допустимую частоту обращений. Поиск, каталог, авторизованный кабинет и webhook обычно требуют разных правил.

Достаточно ли ограничивать запросы по IP-адресу?

Обычно нет. Один адрес может быть общим для офиса, мобильной сети или NAT, а бот может менять адреса. Используйте комбинацию IP, токена, сессии, маршрута, скорости и поведенческого контекста.

Может ли rate limiting повредить SEO?

Может, если ограничение блокирует поискового робота или отдаёт ошибку вместо индексируемой страницы. Проверяйте подтверждённых роботов, коды ответа, robots.txt, sitemap и доступность публичных страниц до и после изменения правил.

Как понять, что защита API работает?

Сравните до и после нагрузку origin, долю ошибок, задержку, успешные операции, стоимость инфраструктуры и качество заявок. Количество заблокированных запросов — только технический сигнал, а не самостоятельный бизнес-результат.

Выберите защиту по задаче

Начните с подтверждённой проблемы и проверьте, какие действия должны оставаться доступными клиентам, поисковым роботам и интеграциям.

По теме материала

Защита сайта10 мин чтения

Как подготовить сайт к распродаже: защита от ботов без потери заказов и SEO

Практический план подготовки интернет-магазина к пиковому спросу: аудит трафика, защита каталога и форм, проверка индексации, контроль заказов и безопасный откат правил.

Читать дальше
Аналитика14 мин чтения

Как отличить полезный бот-трафик от вредного: практический аудит для сайта

Пошаговая методика для владельцев сайтов и интернет-магазинов: как классифицировать автоматические запросы, проверить логи и метрики, защитить SEO и не потерять реальных клиентов.

Читать дальше