CAPTCHA есть — но ничего не защищает
Видимый виджет reCAPTCHA, hCaptcha или Turnstile мало говорит о защите формы. Вот типичные ошибки настройки и способ проверить собственные формы за несколько минут.
Многие владельцы сайтов добавляют CAPTCHA к контактной форме, видят маленький значок или флажок и считают проблему спама решённой. Но мусор продолжает приходить. Часто сама CAPTCHA исправна — она лишь не подключена ни к чему, что способно остановить бота. Эта статья описывает типичные пути превращения reCAPTCHA, hCaptcha и Cloudflare Turnstile в украшение и способы проверки Ваших форм.
Где на самом деле происходит защита
Все три сервиса работают по одному принципу. Скрипт в браузере выполняет проверки и передаёт форме токен — короткую строку со смыслом «этот посетитель прошёл проверку». Токен вместе с отправкой формы поступает на Ваш сервер. Только там принимается реальное решение: сервер отправляет токен с секретным ключом поставщику и получает ответ — успех или отказ, а для reCAPTCHA v3 также оценку. Если какое-либо звено отсутствует, виджет всё ещё выглядит нормально, но бот, отправляющий прямо обработчику формы, проходит беспрепятственно.
Тестовый ключ, пропускающий всё
Google, hCaptcha и Cloudflare публикуют специальные тестовые ключи, чтобы разработчики могли запускать автоматические тесты без решения головоломок. С соответствующим тестовым секретом проверка всегда успешна — именно для этого они нужны. Они предназначены для локальных и тестовых сред, но регулярно переживают перенос в эксплуатацию: разработчик вставляет их во время сборки, сайт запускается, а заменить их никто не вспоминает. reCAPTCHA хотя бы показывает в виджете уведомление о тестовом использовании, но при невидимой конфигурации почти никто не смотрит. Если на рабочем сайте стоят и тестовый ключ сайта, и тестовый секрет, проходит любая отправка — человека или бота; если тестовый только ключ сайта, проверка, напротив, не проходит и реальные сообщения могут отклоняться.
Токен, который никто не проверяет
Вторая классическая ошибка — сервер, который никогда не спрашивает поставщика. Виджет работает, токен создаётся и отправляется, а обработчик формы просто игнорирует его. Типичные источники — написанные вручную формы, скопированные фрагменты только для браузера и незавершённые настройки плагина. Близкий вариант: сервер вызывает сервис проверки, но проверяет лишь прохождение запроса, а не содержание ответа. Или порог оценки reCAPTCHA v3 установлен в 0, принимая любую оценку сервиса. Некоторые обработчики также работают по принципу «fail open»: при отсутствии токена или сбое проверки всё равно принимают сообщение — а бот просто не передаёт токен.
Когда виджет на деле не загружается
Другие ошибки настройки ломают браузерную часть. Если ключ сайта не зарегистрирован для домена — типично после переноса из тестовой среды на рабочий сайт, смены домена или нового поддомена, — поставщик отказывается выдавать токены и показывает ошибку в виджете или консоли браузера. После смены темы или обновления плагина разметка виджета может оставаться на странице, а оживляющий её скрипт исчезнуть. Инструмент согласия на cookie может дать тот же эффект, блокируя скрипт CAPTCHA до согласия посетителя. Дальнейшее зависит от сервера: если он требует действительный токен, реальные посетители больше не могут отправить сообщения и никто не замечает потерянных обращений; если не требует, боты проходят свободно.
Ещё два случая легко пропустить. У reCAPTCHA v3 значок в углу показывает лишь загрузку скрипта где-то на странице — возможно, темой или другим плагином, — тогда как интеграция в самом плагине формы выключена. А плагины кеширования могут сохранять страницу с токеном, встроенным в HTML. Токены CAPTCHA действуют лишь несколько минут и проверяются однократно, поэтому кешированный токен не проходит у реальных посетителей; соблазнительное «исправление» отключением проверки незаметно убирает защиту.
- Виджет показывает уведомление «только для тестирования»
- Значок v3 находится в углу
- Виджет отображается и возвращает токен
- Спам прекратился — но и реальные обращения тоже
- Используются публичные тестовые ключи, и любая проверка успешна
- Интеграция reCAPTCHA в плагине формы выключена
- Сервер никогда не отправляет токен на проверку или игнорирует результат
- Ключ сайта не зарегистрирован для домена или кешированные токены истекли
Краткая самостоятельная проверка
- 1Откройте страницу формы в приватном окне, откройте инструменты разработчика браузера и проверьте консоль на ошибки скрипта CAPTCHA.
- 2Проверьте реальное появление виджета — до и после принятия баннера cookie — и невозможность отправить форму при его отсутствии.
- 3В консоли администратора поставщика проверьте, что ключ сайта содержит Ваш рабочий домен (включая варианты вроде www), а ключи в плагине формы или коде соответствуют ему — это не ключи из документации или тестовой конфигурации.
- 4В настройках плагина формы убедитесь, что интеграция CAPTCHA включена именно для этой формы; для reCAPTCHA v3 проверьте, что порог оценки выше 0.
- 5Если у Вас есть доступ к коду, найдите серверную проверку и убедитесь, что она отклоняет отправку при отрицательном ответе или отсутствии токена.
- 6Исключите страницу формы из полностраничного кеширования или убедитесь, что токен создаётся заново в браузере.
- 7Отправьте настоящее тестовое сообщение и проверьте получение; повторите проверку после изменений темы, плагинов или инструмента согласия.
CAPTCHA — один уровень, а не вся защита. В сочетании с honeypot, проверкой времени и серверной фильтрацией ошибка в одном месте не оставляет форму полностью открытой. Если Вы хотите быстро понять состояние своих форм, введите домен на formexposed.com — отчёт покажет, в порядке ли видимые снаружи части конфигурации CAPTCHA.