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







