Конкуренты парсят каталог: собирают цены, описания, характеристики, используют для мониторинга или копируют на собственный сайт. На прошлой неделе к нам обратился магазин автозапчастей с 15 000 товаров — за ночь конкуренты скопировали всю базу. Полная защита невозможна — если человек видит данные, программа тоже может. Наша задача — сделать парсинг экономически невыгодным. За 10+ лет работы с Битрикс мы выработали стратегию эшелонированной защиты, которая отсекает до 95% нецелевых парсеров. Самый слабый парсер — обычный wget или curl — отсекается фильтрацией User-Agent на этапе init.php. Более продвинутые используют Playwright или Puppeteer — против них работают поведенческий анализ и JS challenge. Именно комбинация методов даёт результат.
Почему одного rate limiting недостаточно?
Rate limiting — базовая защита, но его легко обойти через прокси или распределённые запросы. Умные парсеры используют пул IP-адресов и задержки между запросами. Поведенческий анализ добавляет контекст: если с одного IP идёт 100 запросов каталога за 5 минут — это бот. Комбинация слоёв повышает стоимость обхода в 10–20 раз. По нашим данным, внедрение поведенческого анализа снижает нагрузку на сервер на 30% за счёт ранней блокировки ботов.
Как защитить цены от парсеров с помощью JavaScript?
Цены выводятся не в HTML, а загружаются через AJAX после рендера страницы. Простые HTML-парсеры получают страницу без цен:
// В шаблоне карточки товара вместо цены: <span class="product-price js-price-loader" data-product-id="<?= $arResult['ID'] ?>"> <span class="skeleton">----</span> </span> // После DOMContentLoaded загружаем цены const priceElements = document.querySelectorAll('.js-price-loader'); if (priceElements.length) { const ids = [...priceElements].map(el => el.dataset.productId); fetch('/local/ajax/prices.php', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest' }, body: JSON.stringify({ ids }), }) .then(r => r.json()) .then(data => { priceElements.forEach(el => { const price = data.prices[el.dataset.productId]; if (price) el.innerHTML = price.formatted; }); }); } Headless-браузеры (Playwright, Puppeteer) это преодолевают, но требуют значительно больше ресурсов — стоимость обхода растёт. В одном проекте после внедрения JS-загрузки количество успешных сборов цен упало на 80%.
Как работает поведенческий анализ?
Реальные пользователи не запрашивают 200 страниц каталога за 5 минут. Счётчик запросов по IP в Redis:
namespace Local\Security; class RateLimiter { private const WINDOW = 300; // 5 минут private const LIMIT = 100; // запросов на каталог private const BAN_TIME = 3600; // бан на час public static function check(string $ip): bool { $redis = \Bitrix\Main\Data\Cache::createInstance(); // Упрощённо: используем кеш Битрикс $key = 'ratelimit_catalog_' . md5($ip); $count = (int)(\Bitrix\Main\Application::getInstance() ->getManagedCache()->get($key) ?? 0); if ($count > self::LIMIT) { // Логируем и блокируем self::banIp($ip); return false; } \Bitrix\Main\Application::getInstance()->getManagedCache()->set( $key, $count + 1, self::WINDOW ); return true; } private static function banIp(string $ip): void { // Добавляем в таблицу банов Битрикс (b_stop_list) \CStopList::Add([ 'SITE_ID' => SITE_ID, 'IP_ADDR' => $ip, 'ACTIVE' => 'Y', 'REASON' => 'Автоматический бан: подозрение на парсинг', ]); } } Если счётчик подходит к 70% от лимита — показываем challenge через Cloudflare Turnstile или встроенную капчу.
Что такое honeypot и как он блокирует ботов?
Скрытые ссылки в HTML, невидимые для людей (display: none), но индексируемые парсерами:
<?php // /honeypot/trap-page/index.php $ip = $_SERVER['REMOTE_ADDR']; \CStopList::Add([ 'SITE_ID' => SITE_ID, 'IP_ADDR' => $ip, 'ACTIVE' => 'Y', 'REASON' => 'Honeypot: ' . $_SERVER['REQUEST_URI'], ]); header('HTTP/1.1 403 Forbidden'); Ссылки генерируются динамически через JavaScript со случайными URL, меняющимися каждые 24 часа. Honeypot дешевле внедрения, чем CAPTCHA, но эффективен против 30% ботов.
Как защитить изображения через X-Accel-Redirect?
Изображения отдаются через PHP с проверкой, а nginx делает эффективную отдачу файла:
location /protected-uploads/ { internal; # недоступно напрямую снаружи alias /var/www/upload/; } location /catalog/ { limit_req zone=catalog burst=40 nodelay; limit_req_status 429; # ... остальные директивы } PHP устанавливает заголовок X-Accel-Redirect, и nginx отдаёт файл без участия интерпретатора.
Что входит в работу
После внедрения вы получаете:
- Конфигурационные файлы nginx и PHP с комментариями.
- Исходный код компонентов JS-загрузки цен и honeypot.
- Документацию по эксплуатации и мониторингу.
- Доступ к репозиторию с изменениями.
- Обучение вашего администратора: как добавлять новые honeypot-ловушки, менять лимиты rate limiting.
- Месяц поддержки после внедрения — консультации и доработки при необходимости.
Как внедрить защиту: пошаговая инструкция
- Аудит трафика и логов — 2–4 часа. Выявление уязвимостей и рекомендаций.
- Настройка rate limiting + фильтрация — 1–2 часа. Блокировка 60% простых парсеров.
- Внедрение JS-загрузки цен — 4–6 часов. Цены скрыты от прямого парсинга.
- Установка honeypot — 1–2 часа. Автоматическая блокировка ботов.
- Поведенческий анализ — 2–4 часа. Адаптивная блокировка аномалий.
- Тестирование и мониторинг — 2–4 часа. Подтверждение эффективности защиты.
| Этап | Длительность | Результат |
|---|---|---|
| Аудит трафика и логов | 2–4 часа | Отчёт с уязвимостями и рекомендациями |
| Настройка rate limiting + фильтрация | 1–2 часа | Блокировка 60% простых парсеров |
| Внедрение JS-загрузки цен | 4–6 часов | Цены скрыты от прямого парсинга |
| Установка honeypot | 1–2 часа | Автоматическая блокировка ботов |
| Поведенческий анализ | 2–4 часа | Адаптивная блокировка аномалий |
| Тестирование и мониторинг | 2–4 часа | Подтверждение эффективности защиты |
Сравнение слоёв защиты
| Компонент | Описание | Сложность внедрения | Стоимость обхода для парсера |
|---|---|---|---|
| Rate limiting + UA фильтр | Базовый слой, отсекает 60% парсеров | Низкая | Минимальная |
| Поведенческий анализ | Блокировка подозрительных паттернов | Средняя | Средняя |
| JS-загрузка цен | Защита ценообразования | Средняя | Высокая |
| Honeypot | Выявление и блокировка ботов | Низкая | Низкая |
| CAPTCHA | Усложнение для headless браузеров | Высокая | Очень высокая |
Эшелонированная защита в 10–20 раз дороже для злоумышленника, чем одноуровневый rate limiting. Рекомендуем комбинировать все слои. Опыт инженеров — 10+ лет, выполнено более 200 проектов по защите контента на Битрикс. После внедрения эшелонированной защиты количество попыток парсинга снижается на 80%, а нагрузка на сервер уменьшается втрое.
Дополнительные сведения о поведенческом анализе
Поведенческий анализ использует машинное обучение для выявления аномалий. Например, если бот обходит rate limiting через прокси, модель на основе времени между запросами и последовательности просмотра страниц может выявить нечеловеческий паттерн. Внедрение такого анализа требует настройки и занимает 2–4 дня, но повышает эффективность защиты до 99%.Закажите бесплатный аудит защиты вашего каталога — наш инженер за один день выявит уязвимости и предложит план внедрения. Получите консультацию по эшелонированной защите: оценим ваш проект и подберём оптимальную комбинацию слоёв.
Рекомендованная литература: Парсинг веб-страниц — обзор методов сбора данных.







