Bot Protection

Защита от ботов

Страница модуля в магазине: Защита от ботов · История изменений

Защита от ботов

Модуль защищает витрину от ботов собственной проверкой браузера — без капчи и без сторонних сервисов. Каждый новый посетитель один раз проходит фоновую проверку: браузер решает небольшую вычислительную задачу, обычно за секунду, после чего посетитель запоминается и дальше ходит по магазину без задержек. Боты, которые не выполняют JavaScript или делают тысячи запросов с разных адресов, на этой проверке отсеиваются.

Всё работает на вашем сервере. Задачу выдаёт и проверяет сам магазин, данные о посетителях никуда не передаются. Единственные внешние запросы — раз в сутки модуль скачивает списки адресов, которые официально публикуют владельцы ИИ-ботов и поисковые системы Google и Bing.

Кто проходит без проверки. Поисковые системы (Google, Яндекс, Bing и другие) — после подтверждения адреса по спискам, которые публикуют сами поисковые системы, или запросом DNS, ИИ-боты — по спискам адресов их владельцев, а также уведомления платёжных систем, обмен с 1С, карта сайта, RSS и YML-фиды: исключения для них настроены сразу после установки.

Фильтр запросов. Ещё до проверки браузера модуль отклоняет явные попытки взлома — SQL-инъекции, внедрение скриптов, обращения к чужому программному обеспечению вроде /wp-login.php. Адрес, с которого идёт серия таких запросов, блокируется на время: сканер уязвимостей получает короткий отказ на каждый следующий запрос, не нагружает сервер и не заполняет журналы.

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

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

Модуль рассчитан на магазины, которые не могут или не готовы использовать Cloudflare. Защиты от DDoS-атак он не обещает: проверка не спасёт от перегрузки канала или сервера, но отсеивает большую часть трафика бот-сетей — парсеров, сканеров уязвимостей, накруток.

Защищается витрина. Панель администратора и панель продавца не проверяются. Скрипты в корне магазина, к которым браузер посетителя обращается в фоне (например, поисковые подсказки), можно защитить дополнительно — см. раздел «Основные настройки модуля».

Модуль находится в меню Модули → Модули CS-Commerce → Защита от ботов. В боковом меню модуля три раздела: Настройки, Подключение и состояние и Журнал.

Совместимость

Модуль работает на CS-Cart и Multi-Vendor начиная с версии 4.3.1 и поддерживает редакции CS-Cart, CS-Cart Ultimate, Multi-Vendor, Multi-Vendor Plus и Multi-Vendor Ultimate.

Требования к серверу

  • PHP 7.0 или новее.
  • Расширение PHP SQLite3: настройки и данные защиты хранятся в отдельной базе SQLite, а не в базе магазина. Если расширения нет, попросите хостинг включить его (пакет php-sqlite3).
  • HTTPS на витрине. Проверка браузера использует криптографические функции, которые браузеры дают только на защищённых страницах. Защищённое соединение для витрины включается в разделе Настройки → Настройки безопасности; без него защита не включается.
  • Папка var/csc_bot_protection доступна PHP для записи и закрыта от доступа из браузера (подробнее — в разделе «Подключение и состояние»).

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

Веб-сервер

Модуль работает с Apache и nginx. Для Apache папка данных закрывается файлом .htaccess, который модуль создаёт сам. nginx файлы .htaccess не читает, поэтому на нём нужно отдельное правило в настройках сайта.

Витрины

Настройки защиты общие для всех витрин магазина: и в CS-Cart Ultimate, и в Multi-Vendor Ultimate с несколькими витринами действует один набор настроек и один журнал.

Браузеры посетителей

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

В случае конфликта модуля с вашей темой или другим решением обращайтесь в наш центр поддержки.

Установка модуля

После оформления и оплаты, ваш заказ будет автоматически переведен в статус Оплачен в течение считанных минут. Статус заказа Оплачен означает активацию лицензии и вам на e-mail отправляется письмо с подтверждением о получении оплаты и письмо со ссылкой на скачивание модуля. Так же модуль всегда можно скачать в нашем разделе Управление лицензиями. Для установки модуля на ваш сайт, пожалуйста, выполните следующие шаги:

  1. Скачайте последнюю версию модуля на нашем сайте в разделе "Управление лицензиями" или по ссылке, отправленной по e-mail.
  2. Пройдите в раздел Модули → Управление модулями и в меню шестерёнки выберите Ручная установка.
  3. Выберите ранее скачанный файл и завершите установку модуля.

На этом установка модуля завершена. Для перехода на страницу настроек модуля выберите установленный модуль в разделе Модули → Модули CS-Commerce

Управление модулем

Модуль находится в меню Модули → Модули CS-Commerce → Защита от ботов. В боковом меню три раздела:

  • Настройки — пять вкладок: Основные, Исключения, Проверка и лимиты, Фильтр запросов и Отладка;
  • Подключение и состояние — работает ли защита сейчас, требования к серверу, подключение к витрине, обслуживание и диагностика;
  • Журнал — отклонённые запросы, результаты проверок и сбои защиты.

Настройки хранятся не в базе магазина, а в собственной базе защиты в папке var/csc_bot_protection: защита запускается раньше, чем загружается CS-Cart, и читает их оттуда. Изменения вступают в силу сразу после сохранения.

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

Как работает проверка

Защита запускается первой строкой index.php витрины, раньше CS-Cart, и решает судьбу каждого запроса по порядку:

  1. Заблокированные адреса. Запрос с адреса, заблокированного после серии попыток взлома, сразу получает ответ 403 — без страницы проверки и без записи в журнал.
  2. Фильтр запросов. Явные попытки взлома отклоняются ответом 403 и записываются в журнал, а отправитель теряет заработанное доверие. После серии таких запросов адрес блокируется. Адреса, испорченные почтовыми программами и ботами (& вместо & в параметрах), перенаправляются на правильный адрес.
  3. Исключения. Уведомления платёжных систем, обмен с 1С, фиды и всё, что добавлено на вкладке Исключения, проходит без проверки.
  4. HTTPS. Посетители, пришедшие по HTTP, перенаправляются на HTTPS.
  5. Те, кому уже доверяем: адреса из белого списка; браузер, который недавно прошёл проверку и не превысил лимит запросов; поисковые системы, подтверждённые по опубликованным спискам адресов или запросом DNS; ИИ-боты, чей адрес есть в списке их владельца.
  6. Все остальные видят страницу проверки.

Страница проверки браузера

Страница проверки

Посетитель видит надпись «Проверяем ваш браузер, подождите…». Браузер в фоне решает вычислительную задачу (обычно около секунды на телефоне среднего класса), магазин проверяет решение, запоминает браузер подписанной cookie и адрес посетителя, и страница перезагружается уже с тем, что посетитель запрашивал. Ничего нажимать не нужно.

Если запрос выглядит подозрительно, задача становится сложнее, а посетителю нужно нажать кнопку Я человек. Подозрительность оценивается от 0 до 100 по набору признаков: пустой или ботоподобный User-Agent, отсутствие обычных заголовков браузера, частые запросы проверки с одного адреса, недавняя попытка взлома с этого адреса, одна и та же версия браузера из слишком многих сетей. Какие признаки сработали для конкретного адреса, показывает диагностика (раздел «Подключение и состояние»).

Внизу страницы показан код вида ID 1a2b3c4d. Он записывается в журнал вместе с результатом проверки: если покупатель пишет, что не может попасть в магазин, попросите этот код и найдите его в журнале.

Страница проверки отдаётся с HTTP-кодом 503. Поэтому в журналах веб-сервера много ответов 503 на index.php — это показанная проверка, а не ошибка сервера. Поисковые системы, подтверждённые по DNS, страницу проверки не видят.

После пройденной проверки

Проверенный браузер ходит по магазину без задержек, но не без счёта. Если он делает больше запросов к витрине, чем допускает настройка Сколько запросов допускается для одного проверенного браузера (по умолчанию 120 за 60 секунд), доверие отзывается и посетитель проходит проверку заново, уже с кнопкой. Покупатель до такого числа не доходит даже при быстром просмотре; бот, который один раз решил задачу и пошёл обходить каталог, превышает его за минуты.

Если с защитой что-то не так

Сбой защиты никогда не останавливает магазин. Если на сервере нет SQLite3, повреждена база защиты или внутри произошла ошибка, запросы проходят без проверки, а событие записывается в журнал Сбои защиты и в журнал ошибок сервера (не чаще раза в пять минут по каждой причине).

Подключение и состояние

Страница Подключение и состояние показывает, работает ли защита прямо сейчас, и помогает исправить то, что мешает ей работать. Вверху — итог: Защита работает, Защита выключена (с пояснением, что исправить) или Защита не подключена.

Подключение и состояние

Что делает установка и удаление

При установке модуль сам создаёт папку данных var/csc_bot_protection с базой настроек и секретными ключами (у каждого магазина свои) и добавляет в index.php витрины строку, которая запускает защиту. Если что-то из этого не получилось, установка всё равно завершается, а после неё панель администратора показывает предупреждение со ссылкой на эту страницу.

При удалении модуля защита выключается, строка убирается из index.php, и файл становится таким же, каким был до установки. Папка данных удаляется вместе с настройками и журналами.

Требования к серверу

Список проверок с отметками: PHP 7.0 или новее, расширение SQLite3, папка данных доступна для записи, база настроек на месте, витрина работает по HTTPS. Пока хотя бы один из этих пунктов отмечен красным, защита выключена. У каждого пункта написано, что сделать; после исправления нажмите Проверить и исправить.

Ещё два пункта на работу защиты не влияют, но важны:

  • Папка данных закрыта от доступа из браузера. В папке лежат секретные ключи защиты и адреса посетителей. Модуль проверяет это запросом к самому себе. На nginx добавьте в настройки сайта правило location ^~ /var/csc_bot_protection/ { deny all; } — файл .htaccess nginx не читает.
  • Адреса посетителей определяются. Если перед магазином стоит обратный прокси или CDN, который не передаёт адрес посетителя, все посетители выглядят как один адрес. Как это исправить — в разделе «Типичные проблемы».

Подключение к витрине

Защита запускается строкой в начале файла index.php в корне магазина:

/* csc_bot_protection:begin */ if (is_file(dirname(__FILE__) . '/app/addons/csc_bot_protection/core/loader.php')) { include dirname(__FILE__) . '/app/addons/csc_bot_protection/core/loader.php'; } /* csc_bot_protection:end */

Строка безопасна: если модуль удалить, она ничего не делает. Перед каждым изменением index.php модуль сохраняет копию файла в папке данных (index.php.backup) и проверяет, что после правки файл остался корректным PHP, иначе возвращает прежний.

Если у PHP нет права записи в index.php, страница предлагает подключить защиту вручную одним из двух способов:

  1. добавить показанную строку в index.php сразу после первой строки <?php;
  2. без правки файла — указать полный путь к loader.php в настройке PHP auto_prepend_file (в php.ini, .user.ini или в панели хостинга). При этом способе защищается только index.php витрины, а строка не пропадает при обновлении CS-Cart.

Панель администратора не затрагивается ни при каком способе подключения.

Дополнительные точки входа

Блок появляется, если на вкладке Основные заполнен список Скрипты, защищаемые помимо index.php. Для каждого скрипта показано одно из трёх состояний: строка защиты на месте; файл не найден в корне магазина; строки в файле нет. В последнем случае страница показывает строку, которую можно добавить вручную сразу после первой строки <?php, — она отличается от строки для index.php, не копируйте одну вместо другой.

Обновление модуля, которому принадлежит скрипт, заменяет файл, и строка пропадает. Модуль регулярно проверяет это и показывает предупреждение в панели администратора; кнопка Проверить и исправить возвращает строку. Перед правкой копия файла сохраняется в папке данных, как и для index.php.

Проверить и исправить

Кнопка повторяет шаги установки: создаёт папку данных и базу, если их нет, и восстанавливает строку в index.php и в скриптах из списка дополнительных точек входа. Существующие настройки сохраняются. Если база настроек повреждена, модуль откладывает её в сторону и создаёт новую с настройками по умолчанию.

Обслуживание

Устаревшие записи (истёкшие доверия, лимиты, использованные задачи) и слишком длинные журналы чистятся автоматически раз в сутки, когда кто-то работает в панели администратора. На посещаемом магазине лучше добавить очистку в расписание сервера (cron) — команда показана на странице, например:

php /path/to/store/app/addons/csc_bot_protection/core/cleanup.php

Раз в сутки достаточно. Кнопка Удалить устаревшие записи сейчас выполняет ту же очистку немедленно.

Диагностика

Если настоящий посетитель не может пройти проверку, откройте диагностический адрес, показанный на странице, — он выглядит как https://ваш-магазин/index.php?csc_bp=debug&token=…. Отчёт показывает, как защита оценивает ваш браузер: состояние базы, cookie и белого списка, подтверждение бота, заблокирован ли адрес после серии попыток взлома, уровень подозрительности со всеми сработавшими признаками, сложность задачи и последние записи журнала для этого адреса. Чтобы посмотреть другой адрес, добавьте &ip=1.2.3.4. Диагностика ничего не меняет.

В диагностическом адресе есть секретный ключ. Не передавайте его посторонним: без ключа адрес отвечает 404.

Основные настройки модуля

Вкладка Основные страницы Настройки.

Вкладка Основные

  • Помнить проверенного посетителя, дней — сколько дней посетитель, прошедший проверку, не проверяется повторно. По умолчанию 7.
  • Сколько сетей допускается для одного проверенного браузера — посетитель может менять сети (дом, мобильный интернет, офис). Если один и тот же проверенный браузер приходит из большего числа сетей, он проверяется заново: так одну пройденную проверку нельзя раздать целой сети ботов. По умолчанию 10.
  • Перенаправлять посетителей на HTTPS — проверка браузера работает только по HTTPS. Не выключайте, если ваш веб-сервер сам не перенаправляет всех посетителей на HTTPS. По умолчанию включено.
  • Магазин работает за прокси или CDN — брать адрес посетителя из заголовков X-Forwarded-For / X-Real-IP. Включайте, только если весь трафик идёт через ваш прокси или CDN, который сам выставляет эти заголовки; иначе посетитель сможет подделать свой адрес. По умолчанию выключено.

Дополнительные точки входа

Страницы витрины открываются через index.php, и защита запускается там. Но у некоторых модулей есть собственные скрипты в корне магазина, к которым браузер посетителя обращается в фоне, — например, cls.php модуля «Живой поиск», который отдаёт поисковые подсказки. Такие скрипты идут мимо index.php, и без этой настройки бот может обращаться к ним напрямую.

  • Скрипты, защищаемые помимо index.php — по одному имени файла в строке, например cls.php. Принимаются только файлы .php, которые лежат в корне магазина; index.php и точки входа панели администратора и панели продавца указать нельзя. По умолчанию список пуст.

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

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

Не указывайте скрипты, к которым обращаются другие серверы: API, уведомления об оплате, обмен данными. Они не смогут пройти проверку и будут получать ошибку 403.
Если страницы магазина отдаёт кэш на уровне веб-сервера (nginx, Varnish), посетитель получает страницу без обращения к PHP и проверку не проходит. Защищённый скрипт будет отвечать таким посетителям ошибкой 403 — на таком магазине оставьте список пустым.
Панель администратора не проверяется. Чтобы выключить защиту, отключите модуль.

Исключения

Вкладка Исключения определяет, какие запросы проходят без проверки браузера.

Вкладка Исключения

Запросы, попавшие под исключение, не проверяются совсем. Добавляйте только то, что не может пройти проверку браузера: уведомления платёжных систем, вебхуки, свои серверы. Исключение не удостоверяет отправителя — подписи платёжных уведомлений по-прежнему должны проверяться.

Контроллеры, которые не проверяются

По одному в строке — часть параметра dispatch до точки. Параметр учитывается и в адресе, и в теле POST-запроса. После установки в списке уже есть:

  • payment_notification — уведомления всех встроенных способов оплаты CS-Cart;
  • paypal_checkout — вебхуки PayPal;
  • yandex_checkout и yandex_checkout_for_marketplaces — уведомления ЮKassa;
  • tinkoff — уведомления Тинькофф Эквайринга;
  • exim_1c — обмен данными с 1С;
  • em_subscribers_webhook — вебхуки сервиса email-рассылок;
  • rss — RSS-лента;
  • xmlsitemap — карта сайта;
  • yandex — YML-фид модуля выгрузки товаров.

Свой платёжный модуль или задание по расписанию. Всё, что обращается к витрине с другого сервера и не выполняет JavaScript, нужно добавить в исключения, иначе запрос получит страницу проверки и не выполнится. Посмотрите адрес, на который приходит уведомление или который вызывает cron: если в нём есть dispatch=my_payment.notify, добавьте в этот список my_payment. Типичный пример — задания cron вида wget https://магазин/index.php?dispatch=my_addon.cron: без исключения они молча перестают выполняться.

Фрагменты адреса, которые не проверяются

Для обращений без параметра dispatch — например, когда платёжная система присылает уведомление на ЧПУ-адрес вроде /yoomoney/check_payment. По одному в строке; фрагмент ищется только в пути адреса, параметры не учитываются. Используйте длинные, трудно угадываемые фрагменты вроде /webhooks/pay-a1b2c3 — короткий, как /api, откроет гораздо больше, чем нужно. По умолчанию список пуст.

Адреса, которым всегда доверяем

По одному в строке: IP-адрес или диапазон IPv4 вида 198.51.100.0/24. Ваш офис, сервисы мониторинга, свои серверы. Записи в неверном формате не сохраняются — после сохранения модуль покажет, какие именно.

Доверять запросам с самого сервера

Задания по расписанию, выгрузки и проверки, которые обращаются к магазину по его адресу с того же сервера, пропускаются без проверки. По умолчанию включено. Запрос с адреса сервера не считается своим, если в нём есть заголовки прокси, которые модулю не велено читать, — так выглядят посетители за ненастроенным прокси.

Поисковые системы и ИИ-боты

Поисковые системы и боты, проверяемые по DNS — по одному в строке: фрагмент User-Agent, затем «=» и через запятую домены, которым должен принадлежать адрес бота, так, как их документирует поисковая система. Пример: googlebot = googlebot.com, google.com. Адрес проверяется двойным запросом DNS, поэтому прикрыться одним названием нельзя. Роботы Google и Bing подтверждаются без DNS — по спискам адресов, которые публикуют сами поисковые системы; к DNS модуль обращается, только если адреса в списке нет. После установки в списке Google (все роботы, включая AdsBot и Storebot), Bing, все роботы Яндекса, Mail.ru, Yahoo, DuckDuckGo, Apple, Baidu, Sogou, Naver, Seznam, Petal, а также Amazonbot и Common Crawl.

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

Проверок ботов по DNS в минуту — сколько адресов, представившихся поисковой системой, можно проверить по DNS за минуту на весь сайт. Уже подтверждённые боты, адреса из списков Google и Bing и адреса, не прошедшие проверку за последние сутки, не учитываются. Сверх лимита такой посетитель получает обычную проверку браузера, а настоящий поисковый бот просто придёт позже. Настройка защищает сервер от потока запросов с поддельным названием поисковика: каждый запрос DNS занимает процесс PHP на время ожидания ответа. По умолчанию 30; 0 — не использовать DNS совсем.

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

ИИ-боты, проверяемые по опубликованному списку адресов — по одному в строке: фрагмент User-Agent, затем «=» и https-адрес JSON-файла с адресами бота, который публикует его владелец. Пример: gptbot = https://openai.com/gptbot.json. Файл скачивается раз в сутки. После установки в списке GPTBot, OAI-SearchBot и PerplexityBot.

Боты, которым доверяем по названию, без подтверждения — по одному в строке: фрагмент User-Agent, например ClaudeBot. Это название может подставить в запрос кто угодно и пройти без проверки, поэтому оставьте список пустым, если не готовы на такой риск. По умолчанию пуст.

Проверка и лимиты

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

Вкладка Проверка и лимиты

Сложность проверки

  • Сложность для обычного посетителя — чем больше число, тем дольше браузер решает задачу. 100000 (по умолчанию) — около секунды на телефоне среднего класса.
  • Сложность для подозрительного посетителя — применяется, когда запрос похож на бота. Сложность растёт от обычной до этой по мере роста подозрительности. По умолчанию 1000000.
  • Просить нажать кнопку при подозрительности от — подозрительность оценивается от 0 до 100; начиная с этого уровня посетитель должен нажать кнопку Я человек, а не проверяется в фоне. По умолчанию 70.
  • Время на решение задачи, секунд — столько действует задача, выданная браузеру. По умолчанию 120.

Лимиты на один адрес

  • Проверок за период, не больше — сколько раз один IP-адрес может запросить проверку за период. Дальнейшие запросы отклоняются, пока период не истечёт. По умолчанию 20.
  • Период, секунд — по умолчанию 60.

Обход каталога после пройденной проверки

Браузер, прошедший проверку, получает доверенную cookie и больше не проверяется. Чтобы одна решённая задача не открывала боту весь каталог, модуль считает запросы каждого проверенного браузера к витрине.

  • Сколько запросов допускается для одного проверенного браузера — сверх этого числа за период доверие отзывается, и посетителю придётся пройти проверку заново, уже с нажатием кнопки. Настоящие покупатели даже при быстром просмотре остаются далеко ниже; бот, однажды решивший задачу, превышает его за минуты. По умолчанию 120; 0 — без ограничения.
  • Период, секунд — по умолчанию 60, не меньше 10.

Отзыв доверия записывается в журнал Результаты проверок. Запросы к скриптам из списка дополнительных точек входа в этот счёт не входят.

Сети ботов: один браузер из многих сетей

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

  • Сколько сетей допускается для одной версии браузера — по умолчанию 100.
  • Период, секунд — за который считаются сети; по умолчанию 86400 (сутки).
  • Насколько повышать подозрительность — от 0 до 100, прибавляется к подозрительности каждого посетителя с такой версией браузера. По умолчанию 40 — ниже уровня кнопки (70): при одном этом признаке посетитель получает только более сложную фоновую проверку, а кнопка появляется, когда есть и другой признак автоматизации.
Популярной версией настоящего браузера пользуются многие посетители: на магазине с большой посещаемостью свежая версия Chrome под Windows сама превышает лимит сетей. Поэтому держите значение Насколько повышать подозрительность ниже уровня кнопки. Если покупатели начали массово видеть кнопку Я человек, проверьте в журнале результатов проверок, какие признаки сработали.
В версиях до 1.1.0 значение по умолчанию было 70, и на посещаемых магазинах обычные покупатели видели кнопку. При обновлении на 1.1.0 значение 70 заменяется на 40; если вы задавали другое число, оно сохраняется.

Фильтр запросов

Перед проверкой браузера каждый запрос к витрине проверяется на явные попытки взлома: обращения к чужому программному обеспечению, SQL-инъекции и внедрение скриптов в адресах. Такие запросы отклоняются ответом 403 и записываются в журнал Отклонённые запросы; отправитель теряет заработанное ранее доверие и должен пройти проверку заново, нажав кнопку. Сканеры уязвимостей получают дешёвый отказ, а не страницу с задачей, а после серии таких запросов их адрес блокируется.

Вкладка Фильтр запросов

Настройки вкладки

  • Отклонять подозрительные запросы — выключите, чтобы такие запросы только записывались в журнал, но не отклонялись. Это полезно первые дни после установки, чтобы убедиться, что под фильтр не попадает ничего нужного. По умолчанию включено.
  • Наибольшая длина параметра в адресе, символов — запросы с более длинным параметром считаются попыткой взлома. По умолчанию 2000.
  • Держать адрес под подозрением после попытки взлома, секунд — подозрение снимается раньше, как только посетитель пройдёт проверку, нажав кнопку. По умолчанию 86400 (сутки).
  • Насколько повышать подозрительность после попытки взлома — от 0 до 100. При значении 70 (по умолчанию) посетителю придётся нажать кнопку и решить более сложную задачу.

Блокировка адреса после серии попыток взлома

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

  • Сколько отклонённых запросов до блокировки адреса — по умолчанию 20; 0 — не блокировать.
  • Период подсчёта отклонённых запросов, секунд — за который считаются отклонённые запросы; по умолчанию 600 (10 минут), не меньше 10.
  • Срок блокировки адреса, секунд — по умолчанию 3600 (час), не меньше 60. Блокировка снимается сама.

Блокировка не затрагивает:

  • подтверждённых поисковых роботов и ИИ-ботов;
  • адреса из списка Адреса, которым всегда доверяем и запросы с самого сервера;
  • запросы из исключений — уведомления об оплате, обмен данными;
  • браузеры с действующей доверенной cookie: покупатель, который делит адрес с нарушителем (офис, мобильный оператор) и уже прошёл проверку, продолжает работать с магазином;
  • частные и служебные адреса: за нераспознанным прокси все посетители выглядят как один такой адрес.

В журнале Отклонённые запросы блокировка отмечается одной строкой с правилом ip_banned. Чтобы пропустить адрес раньше срока, добавьте его в Адреса, которым всегда доверяем на вкладке Исключения.

Блокировка работает, только когда включена настройка Отклонять подозрительные запросы: в режиме «только журнал» отклонённые запросы не считаются.

Что проверяет фильтр

  • путь, параметры адреса, cookie и User-Agent — на SQL-инъекции, внедрение скриптов и PHP-кода, выход за пределы папки (../), слишком длинные параметры;
  • обращения к адресам чужих программ и служебных файлов (WordPress, phpMyAdmin, Adminer, cgi-bin, папки .git, файлы .env и .htaccess) — для запросов любого типа, включая POST;
  • параметр фильтров каталога features_hash — в настоящем фильтре он состоит только из букв, цифр, дефисов и подчёркиваний.

POST-запросы (формы оформления заказа, отзывы, обращения) на инъекции не проверяются: в них покупатели пишут произвольный текст, и проверка давала бы ложные срабатывания. Для них работает только проверка обращений к чужим программам.

Запросы к несуществующим файлам .php отклоняются, только если веб-сервер передаёт их в index.php. В обычной настройке nginx и Apache сами отвечают на них 404, и до модуля такие запросы не доходят.

Отладка

Вкладка Отладка.

  • Записывать результат каждой проверки в журнал — каждая пройденная или не пройденная проверка с причиной попадает в журнал Результаты проверок. Помогает выяснить, почему настоящий посетитель не смог пройти. На очень посещаемом магазине можно выключить. По умолчанию включено; журнал ограничен по размеру и обрезается при очистке.
  • Проверять всех при каждом заходе (режим теста) — только для проверки работы: каждый посетитель, включая уже проверенных и поисковые системы, видит проверку на каждой странице. После пройденной проверки запрошенная страница открывается, а через минуту проверка покажется снова. По умолчанию выключено.
Не оставляйте режим теста включённым: в нём проверку видят и поисковые системы, а это мешает индексации.

Журнал

Страница Журнал показывает три журнала, новые записи сверху. Над каждым есть поиск по IP-адресу или любому тексту — например, по коду проверки или названию правила.

Отклонённые запросы

Попытки взлома, остановленные фильтром запросов: время, адрес, сработавшее правило и где оно сработало (адрес, параметры, cookie, User-Agent), запрошенный адрес. Когда адрес блокируется после серии попыток взлома, в журнале появляется одна строка с правилом ip_banned; дальнейшие запросы с этого адреса до конца блокировки в журнал не пишутся.

Журнал: отклонённые запросы

Результаты проверок

Пройденные и не пройденные проверки браузера с причиной: выдана задача (с уровнем подозрительности и сработавшими признаками), решение принято, решение отклонено, превышен лимит запросов проверки, отозвано доверие у проверенного браузера за слишком частые запросы. В каждой записи есть код проверки — тот же, что посетитель видит внизу страницы проверки (ID 1a2b3c4d). Если покупатель пишет, что не может попасть в магазин, попросите этот код и введите его в поиск: запись покажет, что именно произошло.

Журнал: результаты проверок

Сбои защиты

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

Время записей показывается в часовом поясе магазина. Журналы ограничены по размеру: при ежедневной очистке из них остаются последние строки.

Обновление CS-Cart

Обновление CS-Cart заменяет файл index.php, и строка, которая запускает защиту, пропадает. Магазин продолжает работать, но посетители больше не проверяются.

Модуль следит за этим сам: раз в минуту, пока кто-то работает в панели администратора, он проверяет index.php. Если строки нет, в панели появляется предупреждение «Защита от ботов не работает: из index.php пропала её строка» со ссылкой Восстановить подключение. Ссылка ведёт на страницу Подключение и состояние; нажмите там Проверить и исправить — строка вернётся, настройки сохранятся.

Центр обновлений CS-Cart покажет index.php как изменённый файл — это ожидаемо: изменение и есть строка защиты.

То же происходит со скриптами из списка Скрипты, защищаемые помимо index.php: обновление модуля, которому принадлежит скрипт, заменяет файл. Панель покажет предупреждение «Из файлов пропала строка защиты от ботов» с именами файлов и той же ссылкой Восстановить подключение; пока строка не возвращена, эти скрипты не защищены.

Если вы не хотите, чтобы модуль правил index.php, подключите защиту через настройку PHP auto_prepend_file (см. «Подключение и состояние»): такое подключение обновление CS-Cart не затрагивает.

Типичные проблемы

В журналах сервера много ответов 503

Это показанная страница проверки, а не ошибка: она отдаётся с кодом 503, чтобы поисковые системы и кэши не сохраняли её вместо настоящей страницы. Ботов, которые не прошли проверку, обычно гораздо больше, чем покупателей, поэтому ответов 503 на index.php может быть больше, чем ответов 200. Прорыв защиты выглядел бы как ответ 200 на запрос бота.

Магазин за Cloudflare или обратным прокси

Если перед магазином стоит Cloudflare, nginx в роли обратного прокси или другой CDN, PHP видит не адрес посетителя, а адрес прокси. Тогда у всех посетителей один адрес, один белый список и один лимит проверок. Страница Подключение и состояние предупреждает об этом. Исправить можно одним из двух способов:

  • восстановить адрес посетителя на уровне веб-сервера — для Cloudflare в nginx это set_real_ip_from с диапазонами адресов Cloudflare и real_ip_header CF-Connecting-IP; модуль тогда сразу видит настоящий адрес;
  • или включить на вкладке Основные настройку Магазин работает за прокси или CDN — только если весь трафик идёт через ваш прокси, иначе посетители смогут подделать свой адрес.

Не приходят уведомления об оплате

Встроенные способы оплаты CS-Cart, PayPal, ЮKassa и Тинькофф работают сразу. Если платёжный модуль присылает уведомления на свой контроллер или ЧПУ-адрес, добавьте его на вкладке Исключения: контроллер — в список контроллеров, адрес без dispatch — в список фрагментов адреса. Найти нужный адрес помогает журнал веб-сервера: уведомление, получившее страницу проверки, видно там как ответ 503 на POST-запрос с адреса платёжной системы.

Перестали выполняться задания по расписанию

Задания cron, которые вызывают витрину по адресу (wget, curl), не умеют проходить проверку. Если задание запускается на том же сервере, его пропускает настройка Доверять запросам с самого сервера. Если с другого сервера или настройка выключена, добавьте контроллер из адреса задания в исключения. Задания, запущенные командой php index.php … из консоли, защита не проверяет.

Настоящий посетитель не может пройти

  1. Попросите код со страницы проверки (ID …) и найдите его в журнале Результаты проверок.
  2. Если причина в превышенном лимите или высокой подозрительности, откройте диагностику с &ip=адрес_посетителя: она покажет все сработавшие признаки.
  3. Если посетитель работает из офиса или через корпоративный прокси, добавьте его адрес в Адреса, которым всегда доверяем.
  4. Если кнопку Я человек начали видеть многие покупатели с одинаковым браузером, проверьте на вкладке Проверка и лимиты, что Насколько повышать подозрительность в блоке сетей ботов меньше значения Просить нажать кнопку при подозрительности от (по умолчанию 40 и 70).
  5. Если в журнале у покупателя записан отзыв доверия за слишком частые запросы, увеличьте Сколько запросов допускается для одного проверенного браузера. Так бывает, когда страницы магазина сами делают много фоновых запросов к index.php.

Посетитель с выключенным JavaScript пройти проверку не сможет. В очень старом браузере, где нет нужных функций, страница предложит открыть сайт в современном браузере.

Адрес заблокирован, а его нужно пропустить

Блокировка после серии попыток взлома снимается сама — по умолчанию через час. Чтобы пропустить адрес сразу, добавьте его в Адреса, которым всегда доверяем на вкладке Исключения. Заблокирован ли адрес, показывает диагностика с &ip=адрес. Если под блокировку попал ваш собственный сервис проверки безопасности или мониторинга, держите его адрес в этом списке постоянно.

Поисковые подсказки или виджет отвечают ошибкой 403

Так отвечает скрипт из списка Скрипты, защищаемые помимо index.php посетителю, который не прошёл проверку. Если ошибку получают обычные покупатели, значит, они не проходят проверку на страницах магазина: чаще всего страницы отдаёт кэш веб-сервера (nginx, Varnish), и запрос не доходит до PHP. Уберите скрипт из списка. Ошибку 403 получит и любой сервер, который обращается к такому скрипту, — серверные интеграции в этот список не добавляют.

Защита выключена, хотя модуль включён

Откройте Подключение и состояние: красным отмечено то, что мешает. Чаще всего это отсутствие HTTPS на витрине, отсутствие расширения SQLite3 или пропавшая после обновления CS-Cart строка в index.php. Защита также выключается, если не удаётся подтвердить лицензию модуля для домена; временная недоступность сервера лицензий защиту не выключает.

Обновление модуля

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

Модуль поддерживает поставку обновлений через Центр обновлений CS-Cart. О выходе новых версий модуля вас оповестит встроенный Центр уведомлений Cart (колокольчик). Обновление модуля с помощью Центра обновлений позволит без потерь настроек данных модуля произвести переход на более новую версию модуля.

Непосредственно перед обновлением, крайне рекомендуется делать полный бэкап сайта (базы данных и файлов) вашего магазина средствами сервера или хостинга.

Обновление модуля через Центр обновлений:

  1. В верхнем меню пройдите в раздел Администрирование → Центр обновлений;
  2. В меню шестеренки нажмите "Проверить доступные обновления"
  3. Cреди списка доступных обновлений найдите нужное и нажмите кнопку Обновить;
  4. Следуйте всем инструкциям, которые будут показаны при процедуре обновления;
  5. Рекомендуется произвести очистку кэша CS-Cart после завершения устанвоки обновлений удалением папки var/cache на вашем сервере или добавлением в адресную строку параметра ctpl (прмиер: https://domain.com/admin.php?ctpl).

Переустановка модуля удалением:

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

Для полной переустановки модуля без сохранения данных выполните следующие шаги:

  1. Пройдите в раздел Модули → Управление модулями и найдите старый установленный модуль.
  2. Нажмите в меню шестеренки модуля кнопку удалить.
  3. Скачайте последнюю версию модуля на нашем сайте в разделе "Управление лицензиями".
  4. Пройдите в раздел Модули → Управление модулями и в меню шестеренки выберите Ручная установка.
  5. Выберите ранее скачанный файл и завершите установку модуля.

Техническая поддержка

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

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

  1. На нашем сайте центра поддержки https://helpdesk.cs-commerce.com/ авторизуйтесь под своей учетной записью;
  2. Нажмите на кнопку "Новая заявка";
  3. Заполните все необходимые поля и создайте заявку (Вы получите на e-mail письмо с подтверждением);
  4. Ожидайте ответ специалиста (на ваш e-mail придет уведомление об ответе на вашу заявку) в соответствии с регламентами работы службы техподдержки.

Если Вы не получили ответ в течении сроков, обозначенных в регламентах, напишите нам на e-mail info@cs-commerce.com сообщение с темой заявки и мы постараемся решить вас вопрос в ближайшее время.

Техническая поддержка по диалогу в чате на сайте, прямым телефонным обращениям или e-mail письмам не осуществляется. Вся помощь проходит через центр поддержки. Внимательно изучайте документацию к модулю и условия технической поддержки перед созданием обращения.

Ограничения и предупреждения

Рекомендуем ознакомиться с общими ограничениями:

  1. Фрагменты кода  или некоторые файлы модуля могут иметь закрытую (закодированную) часть. Закодированная часть не создает проблемы в доработке модуля;
  2. Модуль будет работать только на тех доменах, которые указаны в лицензии пользователя. При попытке использования решения на установках CS-Cart, домены которых не включены в лицензию, модуль будет автоматически выключен;
  3. Установка локально не допускается системой лицензирования. Чтобы модуль работал на дополнительном домене (псевдониме) укажите этот псевдоним на странице управления лицензиями. На один домен допускается указать до трех псевдонимов для нужд тестирования и разработки.
  4. Главный домен лицензии вы можете менять самостоятельно на странице управления лицензиями. 
Для доступа к изменению/добавлению доменов и псевдонимов лицензии, подписка на обновления должна быть активной. Для изменения домена лицензии с истекшим периодом подписки, сначала необходимо продлить подписку на обновления. 

 

История версий

Версия 1.1.0 от 9 ноября 2026 года

  • Добавлена блокировка адреса после серии попыток взлома: запросы сканера уязвимостей отклоняются сразу, не нагружают сервер и не заполняют журналы.
  • Добавлена защита дополнительных скриптов магазина, к которым браузер посетителя обращается в фоне (например, поисковых подсказок).
  • Добавлен лимит запросов для одного проверенного браузера: бот, прошедший проверку, больше не может обходить весь каталог.
  • Исправлена проверка посетителей с самым распространённым браузером: на магазинах с большой посещаемостью им показывалась кнопка «Я человек» вместо проверки в фоне.
  • Проверка поисковых роботов больше не нагружает сервер при потоке запросов с поддельным именем робота.
После установки обновления откройте панель администратора: собственная база защиты обновляется при первом заходе в панель, и до этого новые лимиты и блокировка адресов не действуют.

Версия 1.0 от 6 октября 2026 года

  • Первый релиз модуля: фоновая проверка браузера на витрине без сторонних сервисов, пропуск поисковых систем по DNS и ИИ-ботов по спискам адресов, исключения для платёжных уведомлений, фильтр попыток взлома, журнал с кодом каждой проверки, страница подключения и состояния с проверкой сервера и восстановлением подключения после обновления CS-Cart.