Одной из частых проблем при работе с формами на WordPress, в том числе созданными с помощью WPForms, является спам и автоматические отправки ботами. В этой статье мы подробно разберём, как использовать Google reCAPTCHA v3 для защиты ваших форм, а также как кастомизировать поведение защиты с помощью PHP-кода.
Что такое Google reCAPTCHA v3 и почему она лучше для WPForms
Google reCAPTCHA v3 — это невидимый для пользователя сервис, который анализирует поведение посетителя и выставляет ему балл риска (от 0.0 до 1.0), где 1.0 — это человек, а 0.0 — вероятный бот. В отличие от версии v2, здесь нет необходимости вводить капчу вручную, что значительно улучшает пользовательский опыт.
WPForms поддерживает интеграцию с reCAPTCHA v3 из коробки, однако для более тонкой настройки и фильтрации спама нам понадобится добавить кастомный код на PHP.
Преимущества reCAPTCHA v3 для WPForms:
- Автоматическая оценка поведения без вмешательства пользователя
- Возможность настроить порог срабатывания защиты (score threshold)
- Поддержка кастомной логики для блокировки или пометки подозрительных отправок
Как подключить Google reCAPTCHA v3 в WPForms
Для начала нужно получить ключи API на сайте Google reCAPTCHA:
- Перейдите на https://www.google.com/recaptcha/admin/create
- Выберите reCAPTCHA v3, укажите домен вашего сайта (например, wpforms.ru), примите условия использования и создайте ключи
- Скопируйте Site Key и Secret Key
Далее:
- В админке WordPress перейдите в WPForms → Настройки → reCAPTCHA
- Выберите тип reCAPTCHA v3
- Вставьте Site Key и Secret Key
- Сохраните изменения
Теперь на все ваши формы WPForms автоматически будет добавлена невидимая защита reCAPTCHA v3.
Как настроить порог срабатывания reCAPTCHA v3 в WPForms через код
Стандартно WPForms не предлагает настройки порога, при котором отправка будет блокироваться из-за низкого балла reCAPTCHA. Мы можем добавить такую логику с помощью хука wpforms_process_validate, который срабатывает перед сохранением формы.
Пример кода для functions.php вашей темы или отдельного плагина:
add_filter('wpforms_process_validate', 'wpformsru_validate_recaptcha_score', 10, 3);
function wpformsru_validate_recaptcha_score($field_id, $field_submit, $form_data) {
// Проверяем, что есть ответ reCAPTCHA
if (empty($_POST['g-recaptcha-response'])) {
wpforms()->process->errors[$form_data['id']][$field_id] = 'Ошибка проверки reCAPTCHA. Пожалуйста, обновите страницу и попробуйте снова.';
return;
}
$secret = 'ВАШ_SECRET_KEY'; // замените на ваш секретный ключ reCAPTCHA
$response = sanitize_text_field($_POST['g-recaptcha-response']);
$remoteip = $_SERVER['REMOTE_ADDR'];
$verify = wp_remote_post('https://www.google.com/recaptcha/api/siteverify', [
'body' => [
'secret' => $secret,
'response' => $response,
'remoteip' => $remoteip
]
]);
if (is_wp_error($verify)) {
wpforms()->process->errors[$form_data['id']][$field_id] = 'Не удалось проверить reCAPTCHA.';
return;
}
$body = json_decode(wp_remote_retrieve_body($verify));
if (!$body->success) {
wpforms()->process->errors[$form_data['id']][$field_id] = 'reCAPTCHA не прошла проверку.';
return;
}
// Настраиваем порог оценки (score), ниже которого считаем отправку подозрительной
$threshold = 0.5;
if ($body->score < $threshold) {
wpforms()->process->errors[$form_data['id']][$field_id] = 'Ваша отправка выглядит подозрительной и была заблокирована.';
}
}Этот код вручную проверит ответ reCAPTCHA, получит балл и если он ниже 0.5, то заблокирует отправку с сообщением об ошибке.
Как отображать сообщения об ошибках и отлаживать защиту от спама
WPForms по умолчанию выводит ошибки в форме, если заполнение не прошло валидацию. В нашем случае, если reCAPTCHA не пройдена или оценка слишком низкая, пользователь увидит понятное сообщение.
Для отладки полезно включить журнал ошибок в WordPress и записывать результаты проверки reCAPTCHA. Например, добавьте в код логирование:
error_log('reCAPTCHA score: ' . $body->score);Это поможет понять, как Google оценивает ваших посетителей и при необходимости скорректировать порог.
Дополнительные плагины для усиления защиты форм на WordPress
Кроме reCAPTCHA, рекомендуем рассмотреть следующие плагины для усиления защиты от спама:
- Antispam Bee — бесплатный плагин для фильтрации спама без CAPTCHA.
- WP Cerber Security — комплексная защита, включая блокировку ботов и ограничение доступа.
- CleanTalk — облачный сервис антиспам, который можно интегрировать с WPForms.
Если используете WPShop, обратите внимание на плагин Clearfy Pro — он оптимизирует WordPress и включает расширенные средства защиты от ботов и спама.
Заключение и рекомендации по безопасности форм
Использование Google reCAPTCHA v3 в WPForms — эффективный способ снизить количество спама без ухудшения UX. Однако важно не ограничиваться только этим, а применять комплексный подход:
- Настраивайте порог оценки reCAPTCHA под специфику вашего сайта
- Используйте дополнительные антиспам-плагины и фильтры
- Регулярно обновляйте WPForms и другие плагины
- Отслеживайте логи и анализируйте подозрительные отправки
Так вы обеспечите надёжную защиту форм от злоумышленников и сохраните качество сбора данных.