Модуль для 1С-Битрикс

Умная капча, защита от спама и ботов

Современная защита форм от ботов и спама. Собственный движок — без Google и Яндекса, без платёжных подписок, без рисков по 152-ФЗ.

12
типов тестов
9
тем оформления
6
роботов-персонажей
0
правок шаблонов
Возможности
Всё для надёжной защиты форм
Собственный движок
Никаких запросов к Google, Яндексу или сторонним API. Данные пользователей остаются на вашем сервере — полное соответствие 152-ФЗ.
12 типов тестов
Случайный выбор из 12 заданий не позволяет ботам предсказать следующий тест. Кнопка, математика, картинки, ползунок, память и другие.
Авторежим
Модуль сам находит стандартную Битрикс-капчу и заменяет её. Нулевое вмешательство в шаблоны — установил и работает.
Статистика и журнал
Каждая попытка фиксируется: тип теста, поведенческий балл, IP, страница, результат. Блок-лист IP с ручным управлением.
9 тем + своя тема
Light, Dark, Minimal, Flat, Material, Outlined, Corporate, Neutral и режим «Своя тема» с цветопикерами и живым предпросмотром.
PHP и JS API
Встроить в любую форму — 2 строки кода. Полная документация с примерами для PHP, JS, AJAX и компонентов Битрикс.
Типы тестов
12 видов заданий

Персонажи
6 тематических роботов

После прохождения теста виджет показывает анимированного персонажа, подходящего для вашей ниши.

Сравнение
Умная капча vs конкуренты
Возможность Умная капча Google reCAPTCHA Yandex SmartCaptcha
Собственный сервер (без внешних API)✓ Да✗ Нет✗ Нет
Без доп. платежей за сервис✓ Всё включено⚠ Free tier✗ Яндекс.Облако
Соответствие 152-ФЗ✓ Полностью⚠ Риск (серверы США)✓ Да
12 типов визуальных тестов✓ Да✗ Нет✗ Нет
PHP + JS API для разработчиков✓ Полный✗ Нет✗ Нет
Popup-режим (тест в модальном окне)✓ Да✗ Нет✗ Нет
9 тем оформления + своя тема✓ Да✗ Нет✗ Нет
IP-блок-лист + журнал попыток✓ Встроено✗ Нет✗ Нет
Поведенческий анализ (7 сигналов)✓ Встроен✓ На стороне Google✓ На стороне Яндекс

Готовы защитить сайт?

Установка через Маркетплейс занимает 2 минуты. Внешние ключи и подписки не нужны.

Через Маркетплейс
Автоматическая установка прямо из административной панели Битрикс. Обновления в один клик.

Маркетплейс

1

Откройте раздел Маркетплейс

В административной панели Битрикс перейдите: Marketplace → Установленные решения. Нажмите «Найти решения».

2

Найдите «Умная капча»

В строке поиска введите luxar.captcha или «Умная капча». Нажмите «Установить» рядом с модулем.

3

Подтвердите установку

Битрикс запросит подтверждение. После установки автоматически создадутся 4 таблицы БД и зарегистрируются обработчики событий.

4

Перейдите в настройки

Меню администратора: Решения → Умная капча → Настройки. Выберите тему, тип теста, включите капчу для нужных сайтов.

5

Готово

В режиме «Авто» капча работает на всём сайте без правки шаблонов. Откройте любую форму — стандартная Битрикс-капча заменена виджетом модуля.

Время установки в авторежиме — около 2 минут. Никаких внешних ключей и правок шаблонов не требуется.

Что происходит при установке

Файлы
JS, CSS, изображения, темы, страницы администратора, AJAX-скрипт копируются в корневые папки Битрикс.
База данных
Создаются 4 таблицы: luxar_captcha_tokens, luxar_captcha_logs, luxar_captcha_ip_blocks, luxar_bitrix_captcha.
События Битрикс
Регистрируются обработчики OnPageStart, OnEndBufferContent, OnCheckCaptcha, OnBuildGlobalMenu.
Агент очистки
Создаётся агент, который раз в час очищает устаревшие токены и старые записи журнала.

Системные требования

1С-Битрикс
Версия 22.0+. Любая редакция. Требует ядро D7.
PHP
PHP 8.0+. Расширения: pdo, json, mbstring.
База данных
MySQL 5.7+ или MariaDB 10.3+.
Браузеры
Все современные. JavaScript обязателен.

Основные настройки

Каждый сайт Битрикс настраивается на отдельной вкладке. Параметры хранятся с суффиксом идентификатора сайта, например theme_s1.

on_{SITE}ФлажокПо умолчанию: Да
Включить капчу
Включает или выключает капчу для данного сайта. При выключении виджет не отображается, токен пропускается без проверки.
test_type_{SITE}МультивыборПо умолчанию: auto
Тип теста
Какие типы тестов показывать пользователям. При выборе нескольких тип выбирается случайно. Оставьте «авто» для максимальной защиты.
theme_{SITE}СписокПо умолчанию: light
Тема оформления
Доступны: light, dark, minimal, flat, material, outlined, corporate, neutral, custom. При выборе custom появляются цветопикеры.
popup_mode_{SITE}ФлажокПо умолчанию: Нет
Popup-режим
Тест показывается в модальном окне поверх страницы при submit формы. После прохождения форма отправляется автоматически. Поддерживает обычный submit и AJAX-формы.
replacement_mode_{SITE}auto / manualПо умолчанию: auto
Режим замены
auto — модуль сам находит и заменяет стандартную Битрикс-капчу. manual — вы явно вызываете LuxarCaptcha::render() в нужных местах.
robot_theme_{SITE}СписокПо умолчанию: general
Персонаж-робот
Тематический SVG-персонаж, показываемый после прохождения теста: general, shieldbot, medicine, auto, construction, realty.

Настройки безопасности

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

min_score_{SITE}0–100По умолчанию: 70
Минимальный поведенческий балл
Порог поведенческого анализа (7 сигналов). Посетители ниже порога считаются подозрительными. При жалобах реальных пользователей снижайте по 5–10 единиц.
max_attempts_{SITE}1–10По умолчанию: 3
Количество попыток
Сколько раз можно ошибиться до срабатывания ограничения. Рекомендуется 2–3 попытки.
block_action_{SITE}escalate / blockПо умолчанию: escalate
Действие при блокировке
escalate — показать более сложный тест (мягкий вариант). block — заблокировать IP (для сайтов под активной атакой).
block_duration_{SITE}минутыПо умолчанию: 30
Длительность блокировки IP
На сколько минут блокируется IP. 30 минут — оптимально. Слишком длинная блокировка может затронуть реальных пользователей за общим NAT или VPN.
honeypot_{SITE}ФлажокПо умолчанию: Да
Ловушка для ботов (honeypot)
Скрытое поле, которое видят только боты. При заполнении — немедленное отклонение без показа теста. Держите включённым.
token_ttlсекундыПо умолчанию: 1800
Срок жизни токена
Сколько секунд действует токен успешного прохождения (по умолчанию 30 мин). Для длинных форм увеличьте до 3600.

При min_score выше 80 возможны ложные срабатывания у пользователей с нестандартными устройствами (touchpad, планшеты). Проверяйте балл в журнале.

Настройки своей темы

Отображаются, когда в поле «Тема оформления» выбрано значение custom. Предпросмотр обновляется в реальном времени при изменении любого цвета.

--lc-bgЦвет / прозрачныйПо умолчанию: #ffffff
Фон виджета
Цвет фона контейнера виджета. Флажок «прозрачный» задаёт transparent — фон сайта просвечивает сквозь виджет.
--lc-textЦветПо умолчанию: #333333
Цвет текста
Основной цвет текста внутри виджета.
--lc-accentЦветПо умолчанию: #3a7bd5
Активный цвет (accent)
Цвет кнопок, ползунка, индикатора успеха и его фона.
--lc-borderЦвет / прозрачныйПо умолчанию: #e0e0e0
Цвет рамки
Цвет рамки контейнера. Флажок «прозрачный» — рамка не отображается.
--lc-radiuspx (0–50)По умолчанию: 8
Скругление углов виджета
Радиус скругления углов контейнера в пикселях. 0 — острые углы, 50+ — капсульная форма.
--lc-shadowФлажокПо умолчанию: Да
Тень виджета
Мягкая тень вокруг виджета. При снятии флажка задаётся none.

Переопределить тему через CSS сайта: .my-page .lc-theme-custom { --lc-accent: #7c3aed; --lc-radius: 16px; }

Режимы работы

Авторежим (рекомендуется)

Модуль работает прозрачно — не нужно менять шаблоны сайта. Обработчик OnEndBufferContent регулярным выражением находит HTML стандартной Битрикс-капчи и заменяет его на виджет модуля.

Достаточно выбрать режим auto в настройках и сохранить — капча уже работает на всём сайте.

Для отключения авторежима на конкретной странице добавьте в init.php или шаблон:

define('LUXAR_CAPTCHA_SKIP_AUTO', true);

Ручной режим

Используется когда нужен точный контроль — произвольные формы, нестандартные шаблоны, AJAX-формы. Вы явно вызываете LuxarCaptcha::render() в нужных местах шаблона.

Popup-режим

Кнопка «Я не робот» встраивается прямо в форму, а тест открывается в отдельном всплывающем окне поверх страницы. Удобно для форм с ограниченным пространством. Поддерживает обычный submit и AJAX-формы.

Страницы администратора

Все страницы доступны через меню Решения → Умная капча.

Настройки
/bitrix/admin/luxar_captcha_options.php
Все настройки модуля с предпросмотром виджета и палитрой своей темы. Вкладка для каждого сайта + глобальные настройки.
Статистика
/bitrix/admin/luxar_captcha_stats.php
Журнал попыток: тип теста, поведенческий балл, IP, результат, страница. Фильтрация и экспорт.
Блок-лист IP
/bitrix/admin/luxar_captcha_blocklist.php
Список заблокированных IP-адресов. Ручное добавление, снятие блокировки, просмотр причины и срока.
Токены
/bitrix/admin/luxar_captcha_tokens.php
Просмотр активных токенов прохождения. Инвалидация отдельных токенов или полная очистка.
Справка
/bitrix/admin/luxar_captcha_help.php
Быстрая справка и ссылки на документацию прямо в административном разделе.

Авторежим

В режиме auto модуль работает прозрачно — не нужно менять шаблоны. Три обработчика событий делают всё автоматически.

В авторежиме не нужно: добавлять LuxarCaptcha::render() в шаблоны, вызывать LuxarCaptcha::check() вручную, подключать JS/CSS вручную.

Как это работает

  1. Обработчик OnPageStart подключает JS и CSS через Asset Manager на каждую страницу.
  2. Обработчик OnEndBufferContent регулярным выражением находит HTML стандартной Битрикс-капчи и заменяет его на виджет.
  3. Обработчик OnCheckCaptcha автоматически вызывает LuxarCaptcha::check() при проверке формы Битрикс.

Отключение авторежима для страницы

// В init.php или шаблоне страницы define('LUXAR_CAPTCHA_SKIP_AUTO', true);

Ручное внедрение

Используется когда нужен точный контроль — произвольные формы, нестандартные шаблоны, AJAX-формы.

Шаг 1 — Вывод виджета в шаблоне

<!-- В шаблоне .php или component template.php --> <?php use Bitrix\Main\Loader; Loader::includeModule('luxar.captcha'); ?> <?= LuxarCaptcha::render([ 'site_id' => SITE_ID, // необязательно 'test_type' => 'auto', // необязательно 'theme' => 'light', // необязательно ]) ?>

Шаг 2 — Проверка токена при отправке формы

if ($_SERVER['REQUEST_METHOD'] === 'POST') { $token = $_POST['luxar_captcha_token'] ?? ''; $captchaId = $_POST['luxar_captcha_id'] ?? ''; if (!LuxarCaptcha::check($token, $captchaId)) { $errors[] = 'Пожалуйста, пройдите проверку капчи.'; } }

Передавайте оба поля: luxar_captcha_token и luxar_captcha_id. Без captcha_id токен проверяется менее строго.

AJAX-форма — получение и передача токена

// Перед отправкой fetch(): const captchaEl = document.querySelector('.luxar-captcha'); const token = captchaEl?.querySelector( '[name="luxar_captcha_token"]')?.value; if (!token) { alert('Пройдите проверку капчи'); return; } fetch('/handler.php', { method: 'POST', body: JSON.stringify({ token, /* данные формы */ }) });

Использование в компоненте Битрикс

<!-- component/templates/.default/template.php --> <?php if ($arResult['SHOW_CAPTCHA']) { echo LuxarCaptcha::render(); } ?>

PHP-методы

string LuxarCaptcha::render(array $options = [])

Возвращает HTML-разметку виджета. Параметры: site_id, test_type, theme — все необязательны и перекрывают настройки сайта.

bool LuxarCaptcha::check(string $token, string $captchaId = '')

Проверяет токен капчи. Возвращает true при успехе. Токен одноразовый — после успешной проверки инвалидируется. Возвращает false если токен не существует, истёк или уже использован.

string LuxarCaptcha::getClientIp()

Возвращает IP-адрес клиента. Поддерживает Cloudflare (HTTP_CF_CONNECTING_IP), прокси (HTTP_X_FORWARDED_FOR) и прямое подключение (REMOTE_ADDR).

string LuxarCaptcha::resolveTestType(string $configured)

Преобразует строку конфигурации теста ('math,slider,memory') в один конкретный тип, выбирая случайно из списка.

string LuxarCaptcha::buildCustomThemeCss(string $siteId, array $override = [])

Возвращает CSS для пользовательской темы. Параметр $override позволяет переопределить значения без сохранения в БД — используется в предпросмотре настроек.

JS API

После инициализации модуль доступен как window.LuxarCaptcha. В авторежиме и ручном режиме инициализируется автоматически через OnPageStart.

Методы

LuxarCaptcha.on(event: string, fn: function)

Подписка на событие виджета. Доступные события: success, error, reset.

LuxarCaptcha.getToken(captchaId: string) → string|null

Возвращает токен для виджета с данным captchaId после успешного прохождения или null.

LuxarCaptcha.reset(captchaId: string)

Сбрасывает виджет в начальное состояние. Полезно для AJAX-форм после успешной отправки.

Пример: разблокировать кнопку отправки

LuxarCaptcha.on('success', function(data) { document.getElementById('submit-btn').disabled = false; console.log('Токен получен:', data.token); }); LuxarCaptcha.on('error', function(data) { console.error('Ошибка капчи:', data.error); });

Пример: сброс после AJAX-отправки

fetch('/handler.php', { method: 'POST', body: formData }) .then(res => res.json()) .then(data => { if (data.success) { // Сброс капчи после успешной отправки LuxarCaptcha.reset(captchaId); } });

AJAX-протокол

Эндпоинт: /bitrix/tools/luxar.captcha/ajax.php

Все запросы требуют валидного Bitrix sessid. Заголовок Origin/Referer должен совпадать с хостом (CSRF-защита). Лимит: 20 запросов в минуту с одного IP.

action: get_test

// Запрос { action: "get_test", sessid: "...", captcha_id: "uuid виджета", site_id: "s1", test_type: "auto" } // Ответ (успех) { success: true, captcha_id: "...", test: { type: "math", task_id: "...", expr: "3 + 7" } }

action: verify_test

// Ответ (успех) { success: true, token: "...", score: 82 } // Ответ (неудача) { success: false, error: "wrong_answer", retry_left: 2, escalate: true, next_test: "memory", score: 45 }

Коды ошибок

КодHTTPПричина
invalid_sessid403Неверный или отсутствующий sessid Bitrix
invalid_origin403Запрос с другого домена (CSRF-защита)
rate_limit429Превышен лимит запросов с IP
ip_blocked200IP заблокирован. Поле retry_after — секунды до разблокировки
bot_detected200Сработала ловушка honeypot
low_score200Поведенческий балл ниже порога min_score

Bitrix-события

Модуль регистрирует три обработчика событий при установке. Снять их нельзя вручную — только при деинсталляции.

OnPageStart
LuxarCaptcha::onPageStart · Приоритет: 0
Ранняя инициализация. Подключает JS/CSS через Asset Manager. В авторежиме инжектирует глобальный init-скрипт и CSS пользовательской темы.
OnEndBufferContent
LuxarCaptcha::onEndBufferContent · Приоритет: 0
Постобработка буфера страницы. В авторежиме регулярным выражением находит HTML стандартной Битрикс-капчи и заменяет на виджет модуля.
OnBuildGlobalMenu
LuxarCaptcha::addRootMenuItem · Приоритет: 0
Добавляет корневой элемент «Решения» в глобальное меню администратора, группируя все модули Luxar.

Модуль не генерирует собственных серверных событий. Для перехвата момента прохождения на стороне сервера — используйте результат LuxarCaptcha::check(). На стороне браузера — событие success в JS API.

Нет. Модуль работает полностью на вашем сервере — никакие внешние ключи и платёжные подписки не нужны. Всё включено в стоимость модуля.
Да. Никакие данные пользователей не передаются за пределы вашего сервера — ни поведенческие сигналы, ни IP-адреса, ни ответы на тесты. Всё хранится в вашей базе данных.
Да. Через ручной режим (PHP API + JS API) можно защитить любую форму, включая AJAX-формы, popup-формы и нестандартные компоненты. Подробнее — в разделе «API → Ручное внедрение».
Модуль использует только стандартные события Битрикс (OnPageStart, OnEndBufferContent, OnCheckCaptcha). Совместимость сохраняется при обновлениях платформы. Следите за обновлениями модуля в Маркетплейсе.
Да. В ручном режиме вы сами выбираете, где показывать виджет. В авторежиме добавьте в шаблон нужной страницы: define('LUXAR_CAPTCHA_SKIP_AUTO', true);
Один модуль — все сайты в рамках одной установки Битрикс. Для каждого сайта — независимые настройки: своя тема, тип теста, пороги безопасности и персонаж-робот. Настройки на отдельных вкладках по сайтам в административном разделе.
Снизьте параметр «Минимальный поведенческий балл» (min_score) на 5–10 единиц. Откройте журнал попыток — там виден балл каждой попытки. Пользователи за общим NAT или VPN могут иметь более низкие баллы из-за нестандартного поведения браузера.
Создайте папку в /bitrix/images/luxar.captcha/ с файлом description.json и изображениями. Структура: в корне папки — preview.png (98×70 px) и файлы изображений по категориям (transport, animals, nature, food и др.). Описание формата — в документации API → раздел «Безопасность».
При деинсталляции через «Настройки → Модули» появится вопрос «Удалить настройки модуля?». Если оставить настройки — таблицы БД и настройки сохранятся для повторной установки. После подтверждения удаляются только файлы, события и агент.