Защита от спама в 1С-Битрикс с помощью google reCaptcha

12.03.2020
Антон Носков

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

Кажется, это противостояние добра и зла, ботов и каптчи, длится с появления интернета.

Поэтому типовая задача на любом проекте: разработать формы, защищенные от спама, при этом не заставляя пользователя разгадывать шифры, выполнять трюки, а в идеале сделать проверку незаметной.

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

Стандартная каптча битрикс

Чего только не придумывали разработчики, чтобы защитить формы. Были текстовые проверки, выбор картинок и даже проверка скрытым полем.

Одним из решений с текстовым заданием является встроенная каптча битрикса.

Встроенная каптча в 1С-Битрикс
Встроенная каптча в 1С-Битрикс

У нее есть ряд настроек (ссылка в админ.панели /bitrix/admin/captcha.php?lang=ru), которыми можно регулировать внешний вид и сложность прохождения для ботов, а как следствие и для пользователей.

Настройки встроенной каптчи в 1С-Битрикс
Настройки встроенной каптчи в 1С-Битрикс

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

Google reCaptcha

Решение, которое большинство пользователей запомнили во второй версии, с выбором нужных изображений и кнопкой «я не робот»:

Google reCaptcha v2
Google reCaptcha v2


Собственно, эта версия была последней из тех, которые требовали от пользователя действий. 

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

Оценка присваивается по шкале, от нуля до единицы. Чем выше значение, тем больше вероятность, что это человек. Администратор может решать, какой порог установить для прохождения защиты, например 0,5.

Данное решение полностью «невидимое», не требует никаких действий со стороны пользователя.

Также для администратора доступна панель, со статистикой прохождения защиты и настройками.

Google reCaptcha console
Google reCaptcha console

Внедрение google reCaptcha v3 в Битрикс

Для подключения можно взять готовые решения, которые присутствуют в маркетплейсе 1С-Битрикс. Данные модули мы используем редко, поэтому в этой статье не рассматриваем.

Кастомное подключение reCaptcha позволяет нам ставить ее как в формы, использующие стандартные компоненты (например, регистрация или конструктор форм битрикс), так и в любые другие решения, от сторонних разработчиков.

Регистрация ключей

Для использования сервиса, нужно иметь аккаунт google и добавить новый сайт в консоли администратора

Добавление сайта в панели google reCaptcha
Добавление сайта в панели google reCaptcha

После чего сервис предоставит два ключа: открытый и серверный.

Клиентская часть

Первоочередно размещаем код отслеживания (желательно на нескольких ключевых страницах, чтобы сервис анализировал поведение пользователя в разных сценариях):

<script src="https://www.google.com/recaptcha/api.js?render=_reCAPTCHA_site_key"></script>

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

grecaptcha.ready(function() {
    grecaptcha.execute('reCaptcha_SERVER_KEY', {action: 'send_form'})
    .then(function(token) {
        //отправка формы
    });	
});

Получив токен, отправляем его вместе с прочими полями формы.

Серверная часть

Для серверной обработки есть целая php-библиотека от google на github, которую можно подключить с помощью composer.

Для упрощенной реализации, можно воспользоваться классом, собранным из этой библиотеки (на момент релиза reCaptcha v3).

В компоненте размещаем серверную обработку с использованием методов данного класса:

$reCaptcha = new ReCaptcha(reCaptcha_SERVER_KEY); 
$verify = $reCaptcha->verifyResponse($_SERVER['REMOTE_ADDR'],$_REQUEST['token']);
if($verify->success=='false' || $verify->action!=='send_form' || floatval($verify->score)<0.5){
     //выбросить исключение или показать ошибку
}

В запросе указываем:

  • событие (произвольное название);
  • ip адрес пользователя;
  • токен, полученный на клиентской стороне.

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

В качестве заключения

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

Проблемы со спамом на вашем сайте? Оставьте заявку на почту info@artwot.ru или позвоните нам по телефону +7 (495) 055-15-23. Менеджер проконсультирует вас и предложит варианты решения вашей проблемы.



Другие публикации