Безопасность сайта

Как защитить сайт от парсинга?

Виталий, Владивосток 0

Заметил в логах сервера, что кто-то методично обходит все страницы каталога подряд с одного IP, явно не человек. Похоже на парсинг цен конкурентами. Что можно сделать на уровне сайта, чтобы усложнить им жизнь?

Дмитрий Акиндинов технический администратор сайтов

ответил

От парсинга полностью не защититься, но затормозить массовый обход можно ограничением частоты запросов на уровне сервера — например, не больше 60 запросов в минуту с одного IP через модуль limit_req в Nginx — и блокировкой известных парсеров по User-Agent и подсетям в .htaccess или конфиге сервера.

Дополнительно помогает: скрыть цены за JavaScript-рендерингом вместо чистого HTML, простые парсеры без headless-браузера их не увидят; добавить honeypot-ссылки, невидимые человеку, но заметные ботам — переход по ним автоматически банит IP; включить капчу там, где идёт массовая выдача данных, например в API каталога, если он есть.

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

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

Подробный разбор DDoS на маленький сайт: как защититься без Cloudflare

Задать свой вопрос

Вопросы проходят модерацию. Ответ появляется на сайте в течение пары дней.

Похожие вопросы

Все вопросы по теме "Безопасность сайта"

Заявка

Обсудим задачу

Напишите имя и телефон, выберите удобный канал. Перезвоню или напишу в течение часа в рабочее время.

Куда удобнее ответить?