Как подключить Google reCAPTCHA к форме на PHP
Подключение reCAPTCHA v2 к форме: получение ключей, виджет на странице и проверка ответа на сервере через siteverify без сторонних библиотек.
Актуальность. Раньше для проверки использовали библиотеку recaptchalib.php версии 1.0 — она устарела. Ниже проверка напрямую через API Google. Учтите, что сервисы Google могут работать нестабильно для части посетителей из России; для российских сайтов стоит рассмотреть Yandex SmartCaptcha.
1. Ключи
Зарегистрируйте сайт в консоли reCAPTCHA: укажите домен и тип «reCAPTCHA v2 — флажок „Я не робот“». Вы получите два ключа: ключ сайта (можно показывать в коде страницы) и секретный ключ (хранится только на сервере, никогда не публикуется).
2. Виджет в форме
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
<form action="/send.php" method="post">
<label for="name">Имя</label>
<input id="name" name="name" required>
<div class="g-recaptcha" data-sitekey="КЛЮЧ_САЙТА"></div>
<button type="submit">Отправить</button>
</form>
3. Проверка на сервере
<?php
$secret = getenv('RECAPTCHA_SECRET'); // секретный ключ — не в коде
$token = $_POST['g-recaptcha-response'] ?? '';
$context = stream_context_create(['http' => [
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => http_build_query(['secret' => $secret, 'response' => $token, 'remoteip' => $_SERVER['REMOTE_ADDR']]),
'timeout' => 5,
]]);
$answer = json_decode((string)file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context), true);
if (!empty($answer['success'])) {
echo 'Спасибо, ' . htmlspecialchars($_POST['name'] ?? '') . '!';
} else {
http_response_code(400);
echo 'Подтвердите, что вы не робот.';
}
Проверка обязательна именно на сервере: виджет на странице бот может просто пропустить. Имя из формы выводится через htmlspecialchars, чтобы в ответ нельзя было внедрить скрипт.
Для 1С-Битрикс
В Битриксе есть встроенная CAPTCHA для веб-форм и регистрации, а также модули Маркетплейса для reCAPTCHA и Yandex SmartCaptcha — с ними не нужно править шаблоны компонентов.