Что такое Google reCAPTCHA?
Google reCAPTCHA – это сервис для защиты вашего сайта от ботов и других атак.
Формы обратной связи, комментирования, регистрации, авторизации, оформление заказа довольно часто подвергаются спам атаке. Чтобы их защитить от ботов и злоупотребление можно воспользоваться reCAPTCHA.

Версии Google reCAPTCHA:
- reCAPTCHA v2 – проверка пользователя с нажатием на флажок «Я не робот» («I’m not a robot»), бесплатно до 1 млн проверок в месяц;
- reCAPTCHA v3 – проверка пользователя в фоновом режиме не требующая от него никаких действий (бесплатно до 1 млн запросов в месяц);
- reCAPTCHA Enterprise – предназначена для комплексной защиты всего сайта от мошеннических действий (версия платная, ориентировочная стоимость около 1$ за 1000 запросов).
Подключение reCAPTCHA v2 или v3
Установку Google reCAPTCHA v2 или v3 для проверки форм можно представить в виде следующих шагов:
- получение ключей (site и secret) для сайта;
- вставка виджета и скриптов гугл капчи на HTML страницу;
- передача ответа на сервер;
- получение на сервере результата решения капчи.
Получение ключей reCAPTCHA
Получение ключей для reCAPTCHA v2 или v3 необходимо перейти на страницу «www.google.com/recaptcha/admin».
Для доступа к консоли администратора необходимо иметь аккаунт в Gmail. Если учётной записи нет, то её нужно завести.
После этого необходимо нажать на значок «+».
В открывшейся форме нужно:
- вести название ярлыка (например, Мой сайт);
- выбрать нужный тип reCAPTCHA;
- укажите один или несколько доменов (например, «mysite.ru»);
- принять условия использования reCAPTCHA.
После заполнения всех полей нажать на кнопку «Отправить».
При успешной регистрации Google будут выданы 2 ключа:
- публичный (его нужно вставить в HTML-код);
- секретный (на сервере, для установления обмена данными между сайтом и сервисом reCAPTCHA, т.е. для получения ответа о результатах решения капчи пользователем);

Установка recaptcha на сайт
Подключение reCAPTCHA к сайту (странице) осуществляется как на стороне клиента (в HTML), так на стороне сервера (в PHP).
Разберём, как это осуществляется более подробно. В качестве примере выберем ajax форму обратной связи.
Подключение recaptcha к HTML-документу
Подключение виджета reCAPTCHA к странице осуществляется посредством выполнения 2 действий:
- Включения в страницу JavaScript скрипта recaptcha.
- Добавление элемента
div
с классом"g-recaptcha"
и атрибутомdata-sitekey
, имеющий в качестве значения ваш публичный ключ (public key) капчи.
Кроме этого, добавим на страницу ещё элемент div с идентификатором id=»recaptchaError». Данный элемент будем использовать для отображения ошибки, связанной с google racaptcha.
<!-- добавление элемента div --> <div class="g-recaptcha" data-sitekey="6KepjAsTFFFFFFMqccY0ZiGqc3TEd3YVxo8cHsGX"></div> <!-- элемент для вывода ошибок --> <div class="text-danger" id="recaptchaError"></div> <!-- js-скрипт гугл капчи --> <script src='https://www.google.com/recaptcha/api.js'></script>
Кроме этого необходимо будет внести ещё изменения в файл script.js
, т.к. форма обратной связи отправляется на сервер через AJAX.
// Работа с виджетом recaptcha // 1. Получить ответ гугл капчи var captcha = grecaptcha.getResponse(); // 2. Если ответ пустой, то выводим сообщение о том, что пользователь не прошёл тест. // Такую форму не будем отправлять на сервер. if (!captcha.length) { // Выводим сообщение об ошибке $('#recaptchaError').text('* Вы не прошли проверку "Я не робот"'); } else { // получаем элемент, содержащий капчу $('#recaptchaError').text(''); } // 3. Если форма валидна и длина капчи не равно пустой строке, то отправляем форму на сервер (AJAX) if ((formValid) && (captcha.length)) { ... // добавить в formData значение 'g-recaptcha-response'=значение_recaptcha formData.append('g-recaptcha-response', captcha); ... } // 4. Если сервер вернул ответ error, то делаем следующее... // Сбрасываем виджет reCaptcha grecaptcha.reset(); // Если существует свойство msg у объекта $data, то... if ($data.msg) { // вывести её в элемент у которого id=recaptchaError $('#recaptchaError').text($data.msg); }
Интегрирование recaptcha в php скрипт
Установка recaptcha в скрипт php осуществляется посредством внесения в файл process.php
следующих изменений:
- создание переменной
$secret
, содержащей секретный ключ вашего сайта; - подключения клиентской библиотеки reCAPTCHA PHP посредством включения в скрипт файла
autoload.php
; - проверка наличия ключа
g-recaptcha-response
в суперглобальном массиве POST; - если данное имя (
g-recaptcha-response
) есть, то создать экземпляр службы recaptcha, используя ваш секретный ключ; - получить результат проверки кода: если результат положительный, то выполнить необходимые действия (например, отправить информацию на почту).
- если возникла ошибка, то отправить клиенту отрицательный результат.
// ваш секретный ключ $secret = '6NepjAsGBBABBN7_Qy9yfzShcKmc70X2kXQyX1WO'; // однократное включение файла autoload.php (клиентская библиотека reCAPTCHA PHP) require_once (dirname(__FILE__).'/recaptcha/autoload.php'); // если в массиве $_POST существует ключ g-recaptcha-response, то... if (isset($_POST['g-recaptcha-response'])) { // создать экземпляр службы recaptcha, используя секретный ключ $recaptcha = new \ReCaptcha\ReCaptcha($secret); // получить результат проверки кода recaptcha $resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); // если результат положительный, то... if ($resp->isSuccess()){ // действия, если код captcha прошёл проверку //... } else { // иначе передать ошибку $errors = $resp->getErrorCodes(); $data['error-captcha']=$errors; $data['msg']='Код капчи не прошёл проверку на сервере'; $data['result']='error'; } } else { //ошибка, не существует ассоциативный массив $_POST["send-message"] $data['result']='error'; }