Если форма создаётся собственной темой, плагином авторизации или другой нестандартной системой, одного виджета недостаточно. Нужно вывести Yandex SmartCaptcha внутри формы, а затем проверить полученный токен на сервере WordPress до сохранения данных или отправки письма.
Yandex SmartCaptcha AntiSpam предоставляет для этого PHP-интерфейс. Ниже — пример для разработчика WordPress.
Плагин · Базовая установка · Исходники на GitHub
Что поддерживается автоматически
Стандартные WordPress-формы комментариев, регистрации, восстановления пароля и опционально входа через wp-login.php подключаются через хуки плагина. Для формы, которая обрабатывается отдельным PHP-кодом, AJAX или REST API, автоматическая защита не гарантируется.
Интеграция требует двух точек: HTML-форма и обработчик POST.
1. Выведите SmartCaptcha в HTML-форме
В PHP-шаблоне вашей формы добавьте вызов действия плагина:
<?php do_action('ysca_render', 'contact'); ?>
contact — произвольный идентификатор контекста. Для разных форм используйте стабильные уникальные значения: contact, registration, customer-feedback.
Рендер должен находиться в той же HTML-форме, которая отправляет данные, чтобы токен был передан обработчику.
Вызов не заменяет проверку токена: без серверного шага злоумышленник сможет отправить данные в обход интерфейса.
2. Проверяйте токен до выполнения действия
В обработчике, куда приходит POST-запрос, вызовите:
$result = function_exists('ysca_verify_custom')
? ysca_verify_custom('contact')
: new WP_Error('captcha_missing', 'Проверка недоступна');
if (is_wp_error($result)) {
wp_die(
esc_html($result->get_error_message()),
'Проверка формы',
array('response' => 403)
);
}
// Только после успешной проверки:
// - сохраняйте запись в базе
// - отправляйте письмо
// - создавайте пользователя
Используйте одинаковый контекст в do_action и ysca_verify_custom. Проверка должна выполняться раньше операций, которые нельзя откатить.
В примере отсутствие плагина приводит к ошибке и запрету обработки. Для публичной формы это безопаснее, чем молчаливо пропускать проверку. На реальном сайте настройте собственную обработку ошибок и возврат к форме.
3. Подключение к собственному плагину авторизации
Если сайт использует собственную форму регистрации и входа, то вызовы должны быть встроены непосредственно в её HTML и обработчики. Не полагайтесь на фильтры authenticate и registration_errors, если пользователь проходит не через стандартный поток wp-login.php.
В контекстах можно использовать, например, custom-login и custom-registration. Убедитесь, что проверка серверного токена проходит до вызова wp_signon() или wp_create_user().
Важно: капча не заменяет nonce, ограничение попыток входа, проверки прав, валидацию полей и защиту от перебора паролей.
4. AJAX и REST: особенности
Для AJAX и REST не следует механически копировать пример с wp_die(). Вместо него возвращайте обработанный JSON-ответ со статусом 403 и не выполняйте основное действие при ошибке проверки.
Проверьте, что клиентский JavaScript получает токен и передаёт его в составе того запроса, в котором сервер вызывает ysca_verify_custom(). Если форма отправляет fetch с JSON, может потребоваться адаптер, так как базовый метод v1.0.0 ожидает стандартные параметры POST. Для такой формы нужно проверить код обработчика и при необходимости реализовать преобразование до вызова API.
Плагин не заявляет готовых коннекторов для Contact Form 7, Elementor Forms, WooCommerce или WPForms: совместимость требует отдельной проверки.
5. Проверьте интеграцию
- Попробуйте отправку без токена: запись, письмо или регистрация не должны выполняться.
- Проверьте обычный успешный сценарий с корректным токеном.
- Проверьте повторные отправки для того же контекста и IP.
- На тестовом сайте временно отключите JavaScript: защищённое действие должно быть отклонено.
- Проверьте отключение плагина, API-сбой и отсутствие серверного ключа — обработчик не должен обходить свою собственную проверку без явно принятого решения.
6. Дополнительные меры безопасности
Капча не является универсальным антиспам-фильтром. Вместе с ней используйте валидацию полей, ограничение частоты, контроль прав, одноразовые nonce для подходящих действий и настройку доверенных прокси. Не добавляйте серверный ключ ysc2_… в HTML или JavaScript.
Для нестандартной формы не достаточно просто скопировать HTML виджета — токен должен пройти проверку в API Яндекса с серверной стороны.
Ссылки
- Yandex SmartCaptcha AntiSpam — карточка плагина
- Как настроить Yandex SmartCaptcha в WordPress
- GitHub: исходный код, примеры и ZIP
- API проверки капчи — Яндекс
Источник: https://github.com/noice-man/wp-yandex-smartcaptcha-antispam
Материал был полезен?
Помогите нам сделать материалы точнее и понятнее.