Невидимий захист 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 дні. Ми даємо гарантію на коректну роботу. Отримайте консультацію з інтеграції — ми оцінимо проект безкоштовно. Замовте захист форм від спаму вже сьогодні.







