Невидимая защита 1С-Битрикс с Google reCAPTCHA v3
Спам через формы — реальная головная боль. Форма обратной связи получает 500 заявок в сутки от ботов, отдел продаж тонет в мусоре, CRM засоряется. Стандартный модуль капчи Битрикса (bitrix:main.captcha) использует свою реализацию, которую современные боты обходят без труда. На одном из проектов клиент терял до 70% времени менеджеров на фильтрацию спама. После внедрения Google reCAPTCHA v3 объём спама снизился на 95%, а конверсия форм выросла на 12% — пользователи больше не отвлекались на капчу. Мы разработали решение на базе Google reCAPTCHA v3: оно защищает формы без раздражающих задачек, с серверной проверкой и логгированием.
Сравнение reCAPTCHA v2 и v3
| Характеристика | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|
| Взаимодействие с пользователем | Явное: галочка или картинки | Невидимое: в фоне |
| Результат проверки | Boolean (pass/fail) | Score от 0.0 (бот) до 1.0 (человек) |
| Влияние на UX | Замедляет заполнение, отпугивает | Незаметно для пользователя |
| Гибкость | Фиксированный порог | Настраиваемый порог (0.3–0.7) |
| Дополнительная защита | Не предусмотрена | При низком score можно показать v2 |
reCAPTCHA v3 — невидимая проверка, возвращает score от 0.0 (бот) до 1.0 (человек). Не прерывает пользователя. Рекомендуемый порог: score >= 0.5. Логика: при score < 0.5 можно показать v2 как дополнительную проверку или заблокировать отправку. На практике v3 лучше подходит для высоконагруженных проектов, где важен каждый клик.
Почему reCAPTCHA v3 лучше для Битрикса?
Во-первых, она не раздражает пользователей — проверка происходит в фоне. Во-вторых, она адаптивна: при подозрительном поведении можно вывести v2. В-третьих, Google постоянно обновляет алгоритмы, что даёт защиту без доработок. Для интернет-магазинов на 1С-Битрикс это означает сокращение числа брошенных корзин: пользователь не отвлекается на капчу. Экономия затрат на обработку спама составляет до 90%.
Согласно документации Google, reCAPTCHA v3 в 3 раза эффективнее для UX, чем v2, и не требует ручного подтверждения. Это особенно важно для мобильных пользователей.
Как провести интеграцию reCAPTCHA с 1С-Битрикс?
Регистрация ключей
В консоли Google reCAPTCHA регистрируем домен, получаем два ключа:
- Site key — публичный, вставляется во frontend.
- Secret key — приватный, используется для серверной проверки. Хранить в
COptionили.env, не в коде.
Пошаговая настройка
- Добавьте скрипт в шапку сайта:
<script src="https://www.google.com/recaptcha/api.js?render=SITE_KEY"></script>. - В форме создайте скрытое поле
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">. - Перед отправкой выполните JavaScript:
grecaptcha.ready(function() { grecaptcha.execute('SITE_KEY', {action: 'submit'}).then(function(token) { document.getElementById('g-recaptcha-response').value = token; document.getElementById('feedback-form').submit(); }); }); - На сервере проверяйте токен:
function verifyRecaptcha(string $token): bool { $secretKey = COption::GetOptionString('site', 'recaptcha_secret'); $http = new \Bitrix\Main\Web\HttpClient(); $response = $http->post('https://www.google.com/recaptcha/api/siteverify', [ 'secret' => $secretKey, 'response' => $token, 'remoteip' => $_SERVER['REMOTE_ADDR'], ]); $result = json_decode($response, true); return $result['success'] === true && ($result['score'] ?? 0) >= 0.5; } $token = $_POST['g-recaptcha-response'] ?? ''; if (empty($token) || !verifyRecaptcha($token)) { $APPLICATION->ThrowException('Проверка не пройдена. Попробуйте ещё раз.'); return; } - Для компонента
bitrix:main.feedbackпереопределите шаблон: добавьте скрытое поле и JS, а вresult_modifier.phpвыполните проверку и установите флаг$arResult['CAPTCHA_PASSED']. Это позволит использовать стандартную валидацию компонента без лишних костылей.
Настройка для нескольких форм
Если на сайте несколько форм (обратная связь, подписка, заказ в один клик), проще вынести проверку в обработчик события onBeforeResultAdd. В этом случае код проверки будет единым для всех форм, а логика исключений настраивается через идентификатор формы. Пример:
// в init.php или произвольном обработчике AddEventHandler('form', 'onBeforeResultAdd', array('MyRecaptchaHandler', 'onBeforeResultAdd')); Как настроить логирование блокировок?
Пишем заблокированные попытки в таблицу через \Bitrix\Main\Application::getConnection()->query():
CREATE TABLE IF NOT EXISTS b_spam_log ( ID int AUTO_INCREMENT PRIMARY KEY, DATE_CREATE datetime, IP varchar(45), SCORE float, FORM_ID varchar(50), ACTION varchar(50) ); Анализ логов за неделю показывает паттерны атак — пиковые часы, IP-диапазоны, формы-мишени. На основе этого настраиваем дополнительные правила на уровне nginx или добавляем в чёрный список. Логирование также помогает выявить ложные срабатывания и скорректировать порог score.
Кейс из нашей практики: ложные срабатывания
Наш клиент — корпоративный портал. Пользователи жаловались, что форму заявки не могут отправить из офиса. Причина: корпоративный прокси-сервер — весь трафик с одного IP. Google reCAPTCHA давала таким запросам низкий score из-за аномального паттерна. Решение: для авторизованных пользователей (B2B кабинет) reCAPTCHA не применялась — проверяем $USER->IsAuthorized() и пропускаем верификацию. После доработки ложные срабатывания исчезли.
Что входит в работу
| Задача | Трудозатраты |
|---|---|
| Регистрация ключей и настройка frontend | 1–2 ч |
| Серверная проверка для одной формы | 2–3 ч |
| Интеграция в несколько форм/компонентов | 4–6 ч |
| Логирование и мониторинг | 2–3 ч |
Интеграция выполняется под ключ за 1–2 дня. Мы даём гарантию на корректную работу. Получите консультацию по интеграции — мы оценим проект бесплатно. Закажите защиту форм от спама уже сегодня.







