DDoS-атака или парсеры? Как боты перегружали интернет-магазин на OT Box и увеличивали платные вызовы OTAPI

Реальный технический кейс: нагрузка центрального процессора доходила до 98–100%, число платных обращений к товарной платформе выросло в 6–7 раз, а основная часть проблемного трафика оказалась не классической сетевой DDoS-атакой, а автоматизированными запросами к веб-сайту.
С чего началась история
Владелец интернет-магазина обратился с типичной формулировкой: «Сайт, похоже, DDoS-ят. Боты приходят с разных IP-адресов и из разных стран, ходят по страницам, нагружают сервер и считывают информацию».
Проблема продолжалась почти три дня. По словам владельца, загрузка центрального процессора (CPU) временами доходила до 98–100%. Параллельно примерно в 6–7 раз выросло количество платных вызовов OTAPI, через которые сайт получает товарные данные внешних площадок. То есть проблема была не только в производительности сервера: автоматизированный обход каталога начал увеличивать и прямые эксплуатационные расходы проекта в прямом смысле этого слова.
До обращения ко мне на в VPS сервере уже работал сторонний платный антибот модуль. Не буду называть название модуля, так как к своей профессиональной деятельности отношусь ответственно и отвечаю именно за свою работу, при этом не обливая грязью своих конкурентов. Несмотря на то что хозяин веб-проекта подключил и запустил антибот модуль на VPS сервере, негативная роботная активность продолжалась, а нагрузка не вернулась к нормальному уровню и продолала находиться на аномально высоком уровне, автоматизированный негативный трафик не остановился. В отчаянных попытках найти выход владелец интернет-магазина даже ограничивал доступ к карточкам товаров для неавторизованных посетителей.
Частое явление в такой ситуации это назвать всё происходящее DDoS-атакой. Однако высокая загрузка CPU, множество динамических IP-адресов и запросы из разных стран сами по себе ещё не показывают, что именно происходит.


На чём работает сайт в данном кейсе: движок OT Commerce и платформа OTAPI
В этом проекте используется OT Commerce. Это специализированная платформа для интернет-магазинов, работающих с каталогами Taobao, Tmall, 1688, Alibaba, AliExpress и других торговых площадок. Готовое решение у разработчика называется «Коробка ОТ»: оно устанавливается на домен владельца магазина и содержит витрину, поиск, карточки товаров, личный кабинет, оформление заказов и другие функции интернет-магазина.
Это важное отличие от обычного магазина, где весь каталог товаров целиком хранится в локальной базе данных сайта. В OT Commerce значительная часть товарной информации связана с внешней платформой OpenTrade Commerce. Для обмена данными используется OTAPI. Он представляет собой интерфейс программирования приложений (Application Programming Interface, API) платформы OpenTrade Commerce.
Проще говоря, OTAPI — это программный посредник между интернет-магазином и товарными данными внешних площадок. Когда сайту нужно найти товары, получить карточку товара, описание, сведения о продавце, цену или другой внешний набор данных, сервер сайта может отправить запрос в OTAPI и получить структурированный ответ.
Покупатель или бот
↓
страница интернет-магазина
↓
серверная логика сайта
↓
OTAPI платформы OpenTrade Commerce
↓
хранилище и сборщики данных платформы
↓
Taobao / 1688 / другие провайдеры
У самой OpenTrade Commerce схема описана близко по смыслу: клиенты обращаются к OTAPI, OTAPI работает с внутренним хранилищем данных, а отдельные сборщики платформы получают и обновляют данные у товарных провайдеров. Поэтому открытие страницы интернет-магазина может быть связано не только с локальной работой PHP и базы данных, но и с обращениями к внешней платформе.
Что такое платный вызов OTAPI
Платный вызов OTAPI — это не «соединение с сервером» и не просто любой HTTP-запрос. Это единица тарификации конкретных методов интерфейса OTAPI. По документации OpenTrade Commerce платными являются не все методы, а прежде всего операции, связанные с каталогом, товарами, поиском, продавцами и другой информацией от товарных провайдеров.
Например, платными отмечены методы SearchItemsFrame (глобальный поиск товаров), GetItemInfo (получение информации о товаре), GetItemDescription (получение описания), GetItemFullInfo (полная информация о товаре) и ряд массовых методов. Поэтому автоматизированный бот, который последовательно перебирает карточки товаров интернет-магазина, категории или поиск, может заставлять сайт выполнять именно те операции, за которые владелец платит платформе.
Один технический запрос к OTAPI не всегда равен одному платному вызову. В документации есть методы с динамической стоимостью. Например, для некоторых операций принудительного обновления товара параметр ForceUpdate для Taobao/Tmall, 1688, Alibaba, AliExpress, JD, Amazon и Ebay учитывается как пять вызовов. Для массовых методов стоимость может зависеть от количества реально полученных товаров. С точки зрения OTAPI учитываются успешные обращения к платным методам. В документации отдельно указано, что результат с кодом ErrorCode=Ok или ErrorCode=BatchError считается успешным. Даже если клиентская сторона по какой-то причине не дождалась ответа, но OTAPI успешно завершило обработку, такой вызов может быть учтён.
Почему боты могли одновременно нагружать CPU и увеличивать расходы на API
Для такого сайта опасен не только большой поток запросов. Опасен запрос, который лёгкий для бота, но тяжёлый для серверной части интернет-магазина.
Бот открывает категорию, поиск или карточку товара
↓
веб-сервер запускает серверную логику сайта
↓
выполняются запросы к локальной базе данных
↓
при необходимости сайт обращается к OTAPI
↓
формируется страница и ответ возвращается боту
Для бота это может быть один обычный запрос страницы. Для владельца магазина тот же запрос означает процессорное время, работу базы данных и, в некоторых случаях, платные обращения к внешней платформе. Именно поэтому небольшой по меркам DDoS поток автоматизированных запросов способен создавать непропорционально большую нагрузку.
В этом кейсе владелец одновременно наблюдал два симптома: CPU доходил до 98–100%, а количество платных вызовов выросло примерно в 6–7 раз. Само по себе совпадение ещё не доказывает, что каждый бот-запрос породил платный вызов, но оно хорошо согласуется с механикой магазина: автоматизированный обход страниц заставлял сервер выполнять дорогую прикладную работу.
Как запрос бота превращается в платный вызов OTAPI
Когда бот открывает страницу товара, категории или поиска на grandior.ru, сначала он обращается к самому сайту.
Дальше движок интернет-магазина OT Box может обратиться к внешней платформе OTAPI, чтобы получить нужные данные: информацию о товаре, цену, продавца, результаты поиска или другие сведения.
То есть происходит цепочка:
Бот → site-address.ru → движок OT Box → OTAPI → OT Box формирует страницу → ответ боту
Важно понимать: запрос бота к сайту и запрос сайта к OTAPI — это два разных HTTP-запроса.
Например, бот может открыть страницу магазина по HTTP/2, а сервер сайта обратиться к OTAPI по HTTP/1.1. Это не имеет значения для тарификации. OTAPI считает не версию HTTP и не количество соединений, а вызовы своих методов API.
Поэтому один автоматический запрос к странице магазина может вызвать один или несколько платных запросов к OTAPI. Если бот начинает массово обходить карточки товаров, категории и поиск, растёт не только нагрузка на сервер, но и количество платных обращений к OTAPI.
DDoS, L7 DDoS и автоматизированный бот-трафик — разные вещи
В моей практике самое частое и распространённое явление заключается в том, что ощутимая и немалая часть людей используя одну терминологию, на самом деле попадает в заблуждение. Распределённая атака отказа в обслуживании (Distributed Denial of Service, DDoS) — реальный класс атак. Атака на седьмом, прикладном уровне модели OSI (Layer 7, L7) тоже может быть DDoS. Но не всякая автоматизация на уровне HTTP является DDoS.
Тип трафика | Что обычно перегружается | Что происходит на практике |
Сетевой DDoS, уровни L3/L4 | Канал связи, сетевой стек, таблицы соединений | SYN flood, UDP flood, amplification. Часть трафика может вообще не доходить до веб-приложения. |
L7 DDoS / HTTP flood | Веб-сервер, PHP, база данных, внешние API | Много HTTP-запросов целенаправленно истощают ресурсы приложения и мешают обычным пользователям. |
Автоматизированный L7-трафик | Функции сайта: карточки, поиск, формы, API, авторизация | Парсинг, сканирование, подбор, накрутка, поведенческие боты. Перегрузка может быть не целью, а побочным эффектом. |
Поэтому «много IP-адресов из разных стран» ещё не означает DDoS. Парсеры и другие автоматические клиенты используют прокси, виртуальные частные сети (VPN), облачные узлы и большие пулы адресов. Они могут менять IP-адреса и строку идентификации клиента (User-Agent), а каждый отдельный запрос при этом будет выглядеть как обычный запрос браузера.
Ключевой вопрос — не сколько стран видно в статистике, а что делают запросы и какую нагрузку на веб-сервере они создают. Если бот последовательно обходит тяжёлые страницы и из-за этого сервер оказывается перегружен, падение сайта может быть побочным эффектом парсинга данных на сайте. Если множество источников намеренно создаёт поток запросов именно для исчерпания ресурсов и недоступности сайта, это уже L7 DDoS.
Что показала диагностика
Я не делал вывод по одному признаку. Для такого случая недостаточно посмотреть только на загрузку CPU, список IP-адресов или Яндекс Метрику. Нужно сопоставить характер запросов, серверную нагрузку и то, какие функции сайта они затрагивают.
1. Веб-аналитика показывала только часть роботной активности
В счётчике веб-аналитики были заметны роботные визиты, похожие на поведенческую автоматизацию. Но счётчик видит прежде всего тех клиентов, которые загружают страницу достаточно полно и выполняют клиентский JavaScript-код. Многие парсеры, сканеры и простые HTTP-клиенты могут нагружать сервер, вообще не формируя полноценный визит в веб-аналитике. Поэтому «сколько ботов видно в Метрике» и «сколько автоматизированных HTTP-запросов получает сервер» — это разные величины.
2. После переключения трафика через WAF стало видно реальное соотношение классов трафика
Ниже — агрегированные данные за частичный период 16–19 сентября 2026 года. Это не описание внутренних алгоритмов фильтрации, а только итоговые счётчики, достаточные для понимания масштаба. В статистических данных фильтрации трафика указано количество запросов к страницам. Количество запросов к статическим данным не входит в отчет, отображённый в таблице.
Показатель | Значение | Что означает |
Всего HTTP-запросов | 279 680 | Весь доступный объём запросов за частичный период. |
Запросы к веб-страницам | 276 100 | Основной поток запросов к страницам сайта. |
Автоматизированные запросы, остановленные на раннем этапе | 115 660 | Около 41,9% запросов к страницам были отнесены к автоматизированному трафику по техническим признакам. |
Остановлено из этой группы | 114 871 | Около 99,3% ранней автоматизации не дошло до исходного сервера сайта. |
Поведенческие боты | 1 367 | Около 0,5% запросов к страницам — небольшая видимая часть всей автоматизации. |
Запросы, заявлявшие себя как поисковые краулеры | 28 353 | Сюда попали как реальные поисковые роботы, так и клиенты, которые только называли себя краулерами. |
Валидированные поисковые краулеры | 27 190 | Легитимная поисковая индексация была сохранена. |
Fake crawler | 78 | Клиенты заявляли поисковый User-Agent, но не прошли проверку происхождения. |
Исходя из данных статистики сетевых запросов к сайту виден большой разрыв по объёму между поведенческими ботами и остальным низкуровневым трафиком таким как парсеры, сканеры, взломщики, мусорный и вредоносный трафик. Поведенческие боты составляли около половины процента запросов к страницам, тогда как ранняя автоматизация — почти 42%. Если смотреть только на веб-аналитику, основная часть роботного HTTP-трафика не будет видна. Поисковых роботов нельзя блокировать вместе со всеми остальными ботами.
Для интернет-магазина поисковая индексация критична. Поэтому задача не сводилась к правилу «заблокировать всех ботов». Для индексации сайта с помощью специальных правил сделан пропуск для поисковых краулеров и необходимых для сайта сервисов.
Почему установленный на VPS сервере сторонний антибот модуль не решил именно эту проблему
У защитных продуктов разные задачи и разные модели обнаружения. На сервере антибот модуль уже был установлен и включен, но владелец продолжал фиксировать нежелательных ботов и высокую нагрузку. Поддержка хостинга отдельно поясняла, что продукт не является специализированным средством против парсинга и не гарантирует решение именно такой задачи.
Перед переключением трафика на WAF сервис CRONARMOR, другой сторонний антибот модуль я отключил, чтобы две независимые системы фильтрации не влияли друг на друга.
Целевая задача была такой: нежелательный HTTP-запрос должен завершиться до того, как попадёт на исходный веб-сервер сайта (origin-сервер) и заставит приложение выполнять PHP-код, обращаться к базе данных или делать внешние вызовы OTAPI. Поисковые роботы и необходимые сервисы при этом должны продолжать работать.
Интернет
↓
обратный прокси-сервер + WAF
↓ только прошедшие запросы
исходный сервер интернет-магазина
↓
серверная логика / база данных / OTAPI
Такой WAF-контур нельзя выдавать за универсальную замену сетевой DDoS-защите. Если забит канал связи, идёт SYN flood, UDP flood или другая крупная объёмная атака, проблема должна решаться выше по сети — у провайдера или специализированной anti-DDoS-инфраструктуры. В этом кейсе узким местом оказался именно прикладной HTTP-трафик и работа веб-приложения.

Что произошло с нагрузкой после переключения
Переключение трафика через отдельный WAF-контур произошло вечером 16 сентября. На недельном графике панели управления сервером непосредственно перед переключением CPU поднимался примерно до 80–100%. После переключения линия резко ушла вниз и дальше оставалась на низком уровне.
Следующие сутки дали более полезную контрольную картину: CPU большую часть времени находился от единиц процентов примерно до 9%. В таблице на первых видимых точках были значения 9%, 2%, 5%, 6%, 3% и далее того же порядка.
После подключения WAF-сервиса CRONARMOR изменения стали заметны сразу: резко снизилась нагрузка CPU VPS-сервера, прекратился аномальный рост платных вызовов OTAPI, а в Яндекс Метрике уменьшилось количество роботных визитов.


Как разбирать похожую ситуацию без терминологической путаницы
Сначала определить, на каком уровне заканчиваются ресурсы: канал связи, сетевые соединения, CPU, база данных или внешний API.
Отделить сетевую DDoS-атаку от нагрузки на веб-сайт. Если проблема возникает уже на уровне HTTP и тяжёлых функций сайта, одной сетевой фильтрации может быть недостаточно.
Смотреть не только на количество IP-адресов, но и на то, какие страницы и функции вызываются. Карточка товара, поиск, калькулятор, авторизация и внешнее API могут иметь очень разную степень нагрузки для сервера.
Не считать Яндекс Метрику полным источником данных о ботах. Запросы, которые не выполняют JavaScript, могут сильно нагружать сервер и не фиксироваться в Яндекс метрике.
Не доверять одному User-Agent поискового робота. Легитимные поисковые системы нужно подтверждать отдельно.
Если сайт использует тарифицируемое внешнее API, учитывать не только CPU, но и стоимость прикладных операций. Для OTAPI один входящий запрос пользователя не равен одному платному вызову.
Что в этом кейсе оказалось важнее самого слова «DDoS»
Для владельца проекта главной задачей было не правильно назвать атаку, а вернуть сервер в нормальный режим нагрузки и прекратить лишние расходы. Тем не менее техническая классификация важна, потому что от неё зависит выбор защиты.
Если бы проблема была в крупной объёмной DDoS-атаке, WAF на HTTP-уровне не решил бы забитый канал. Если бы просто заблокировали всех ботов, пострадала бы поисковая индексация. Если бы смотрели только на веб-аналитику, большая часть автоматизированных запросов осталась бы невидимой.
В этом случае сработало другое: нежелательные HTTP-запросы начали останавливаться до исходного сервера, а легитимный трафик и поисковые краулеры сохранили доступ. После этого загрузка CPU упала с пиковых 80–100% до считанных единиц процентов, а владелец перестал сообщать о продолжающемся росте платных обращений к товарной платформе.
Главный практический вывод: высокая загрузка CPU, тысячи IP-адресов и трафик из десятков стран — это ещё не диагноз DDoS. Сначала нужно понять, какую работу выполняет веб-сайт в ответ на запрос. Иногда реальная проблема заключается не в количестве пакетов, а в том, что каждый автоматизированный запрос запускает тяжёлую серверную логику и внешние платные API-операции.
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.