Как добавить CAPTCHA в HTML: простое руководство для разработчиков
Добавление CAPTCHA в HTML-форму — одна из самых эффективных первых линий защиты от ботов, спама и автоматизированных атак. Независимо от того, защищаете ли вы страницу входа, форму обратной связи или процесс оформления заказа, правильно выбранная CAPTCHA и ее корректная реализация могут существенно повлиять на результат.
Это руководство пошагово покажет, как добавить HTML-код CAPTCHA в ваш проект, и рассмотрит четыре популярных варианта: reCAPTCHA v2 (Checkbox и Invisible), Cloudflare Turnstile, Prosopo Procaptcha и Altcha. Для каждого из них вы получите подробное объяснение, рабочие примеры HTML-кода и рекомендации по проверке на сервере, локальному тестированию и устранению неполадок.
Начните сейчас и автоматизируйте решение reCAPTCHA v2
Практически любое решение CAPTCHA строится вокруг одной и той же базовой концепции: вы регистрируете свой сайт у провайдера CAPTCHA, получаете пару ключей CAPTCHA (публичный site key и приватный secret key) и используете эти ключи для встраивания виджета и проверки ответов.
Вот где нужно зарегистрироваться у каждого провайдера, прежде чем вы напишете хотя бы одну строку HTML:
Самостоятельный хостинг (регистрация не требуется)
HMAC secret, который вы задаёте сами
Во время регистрации вас попросят указать доменное имя сайта. Для локальной разработки добавьте localhost в список разрешённых доменов (подробнее об этом в разделе тестирования).
reCAPTCHA v2 Checkbox — пошаговая инструкция
Классический флажок ("I'm not a robot") — самый узнаваемый captcha html-виджет. Он отображает видимый чекбокс и, при необходимости, визуальное задание с изображениями.
Шаг 1: зарегистрируйтесь и получите свои ключи CAPTCHA
Перейдите на google.com/recaptcha/admin и выберите reCAPTCHA v2 → "I'm not a robot" Checkbox. Добавьте свой домен (включая localhost для локального тестирования) и отправьте форму. Вы получите Site Key и Secret Key.
Шаг 2: добавьте скрипт reCAPTCHA API
Разместите следующий тег <script> в разделе <head> вашего HTML или перед закрывающим тегом </body>:
Когда пользователь проходит проверку и отправляет форму, скрипт Google автоматически добавляет в данные формы скрытое поле с именем g-recaptcha-response. Ваш бэкенд считывает этот токен и отправляет его в API верификации Google вместе с вашим секретным ключом.
reCAPTCHA v2 Invisible — пошаговая инструкция
Invisible reCAPTCHA полностью убирает видимый чекбокс. Вместо этого она выполняет анализ рисков в фоновом режиме и запускает визуальную проверку только при обнаружении подозрительного поведения — в результате большинство пользователей даже не испытают какого-либо неудобства.
Шаг 1: зарегистрируйтесь с правильным типом
В консоли администратора Google reCAPTCHA выберите reCAPTCHA v2 → Invisible reCAPTCHA. Для этого будет сгенерирован другой site key — не используйте одни и те же ключи для разных типов CAPTCHA.
Шаг 2: загрузите API-скрипт
Используйте тот же тег script, что и для варианта Checkbox:
Вместо отдельного <div> вы добавляете атрибуты CAPTCHA прямо к кнопке отправки <button>, указывая JavaScript-колбэк, который будет вызван после завершения проверки.
Определите функцию-колбэк, которая программно отправит форму после успешной верификации.
Когда пользователь нажимает кнопку, reCAPTCHA выполняет фоновый анализ, вызывает onSubmit(token) с токеном ответа, а ваш колбэк отправляет форму. Токен включается в тело POST-запроса как g-recaptcha-response.
Cloudflare Turnstile — пошаговая инструкция
Cloudflare Turnstile — это CAPTCHA-альтернатива с приоритетом на приватность, которая не отслеживает пользователей, не устанавливает cookie для профилирования и не показывает задания с картинками. Она предлагает три режима виджета:
Шаг 1: создайте виджет в Cloudflare Dashboard
Войдите в свою учётную запись Cloudflare, перейдите в раздел Application security → Turnstile, нажмите Add widget, введите свой домен и выберите тип виджета. Скопируйте Site Key и запишите свой Secret Key.
Turnstile автоматически добавляет в форму скрытое поле с именем cf-turnstile-response. Для стандартной отправки формы дополнительный JavaScript не требуется.
Режим Managed в Turnstile будет определять — на основе сигналов браузера — нужно ли показывать задание или пропустить пользователя без него. Для тестирования Cloudflare предоставляет специальные фиктивные site key (рассматриваются в разделе тестирования).
Prosopo Procaptcha — пошаговая инструкция
Prosopo Procaptcha — это ориентированная на Web3 CAPTCHA с приоритетом на приватность, разработанная как прямая drop-in-замена reCAPTCHA. Она не зависит от инфраструктуры Google и изначально построена с учётом приватности пользователей как ключевого принципа.
Шаг 1: получите ключ CAPTCHA от Prosopo
Зарегистрируйтесь на prosopo.io, чтобы получить Site Key.
При отправке формы Procaptcha добавляет в неё скрытое поле с именем procaptcha-response. Передайте этот токен в API верификации Prosopo вместе с вашим секретным ключом на бэкенде.
Altcha — пошаговая инструкция
Altcha — это полностью open-source CAPTCHA с самостоятельным хостингом, использующая механизм proof-of-work — браузер пользователя выполняет небольшую вычислительную задачу вместо решения визуальной головоломки. Она не собирает пользовательские данные, не устанавливает tracking-cookie и полностью соответствует GDPR. Поскольку она работает на вашем хостинге, зависимость от сторонних сервисов отсутствует.
Шаг 1: загрузите виджет Altcha
Регистрация не требуется. Подключите скрипт кастомного элемента:
Для Altcha требуется серверный endpoint, который генерирует криптографическое задание (с использованием HMAC secret key, который вы задаёте сами). Этот endpoint вызывается виджетом перед отправкой формы, чтобы получить новое задание. Библиотека Altcha для вашего фреймворка берёт эту задачу на себя. URL endpoint'а передаётся виджету через атрибут challengeurl.
После завершения proof-of-work Altcha заполняет скрытое поле altcha с payload’ом в кодировке base64. Ваш бэкенд проверяет этот payload по вашему HMAC secret — внешний API-вызов не требуется.
Начните сейчас и автоматизируйте решение reCAPTCHA v2
Независимо от того, какую CAPTCHA вы используете, шаблон серверной проверки остаётся одинаковым:
Извлеките токен из тела POST-запроса, используя имя поля, специфичное для каждого провайдера (g-recaptcha-response, cf-turnstile-response, procaptcha-response или altcha).
Отправьте токен на endpoint проверки провайдера — это POST-запрос, который включает ваш secret key и токен пользователя (а для reCAPTCHA при необходимости ещё и IP-адрес пользователя).
Разберите JSON-ответ — провайдеры возвращают индикатор успеха или ошибки. reCAPTCHA и Turnstile используют поле success: true/false; Prosopo использует verified: true/false; Altcha проверяется локально по вашему HMAC secret. Некоторые провайдеры также возвращают hostname и временную метку задания.
Примите или отклоните отправку — если проверка не пройдена, верните пользователю ошибку и не обрабатывайте данные формы. Если всё прошло успешно, продолжайте обычную обработку.
Altcha: локально — проверяется по вашему собственному HMAC secret, внешний вызов не требуется
⚠️ Никогда не используйте site key для проверки на бэкенде — всегда используйте secret key. Путаница в этих ключах — одна из самых распространённых ошибок при интеграции.
Тестирование CAPTCHA HTML на локальном сервере
Для локального тестирования CAPTCHA требуется несколько дополнительных шагов, поскольку большинство провайдеров проверяют доменные имена.
reCAPTCHA v2: добавьте localhost в список разрешённых доменов в консоли администратора Google reCAPTCHA. Виджет будет нормально отображаться и работать на http://localhost.
Cloudflare Turnstile: используйте официальные тестовые site key от Cloudflare. Ключ 1x00000000000000000000AA всегда даёт успешный результат, а 2x00000000000000000000AB всегда даёт ошибку. Вы также можете использовать успешный site key (1x00000000000000000000AA) вместе с secret key 3x0000000000000000000000000000000AA на бэкенде, чтобы сымитировать ошибку "timeout-or-duplicate". Перед деплоем обязательно замените все тестовые ключи на реальные production-ключи.
Prosopo Procaptcha:localhost поддерживается из коробки — дополнительная настройка не требуется.
Altcha: поскольку решение развёртывается у вас, с localhost оно работает нативно. Просто убедитесь, что ваш endpoint тоже запущен локально.
Используйте DevTools → вкладку Network в браузере, чтобы убедиться, что API-скрипт CAPTCHA загружается (HTTP 200) и что POST-запрос формы содержит ожидаемое поле токена.
Устранение типичных проблем
Виджет CAPTCHA не отображается
Ещё раз проверьте, что site key соответствует зарегистрированному типу CAPTCHA (ключи для checkbox не будут работать с invisible, и наоборот).
Убедитесь, что тег API <script> присутствует и загружается без ошибки 404 или ошибки CORS в DevTools.
Убедитесь, что домен, указанный при регистрации, совпадает с доменом, с которого вы отдаёте страницу, включая наличие или отсутствие www.
Токен отсутствует в POST-запросе формы
Скрытое поле добавляется только после завершения проверки. Если пользователь отправит форму раньше, токен не будет передан.
Для Invisible reCAPTCHA убедитесь, что колбэк onSubmit вызывает form.submit()после того, как токен стал доступен, а не раньше.
Для Altcha проверьте, что ваш endpoint доступен и возвращает корректный challenge.
Проверка на бэкенде возвращает ошибку
Убедитесь, что вы отправляете на endpoint проверки именно secret key, а не site key.
Токены обычно одноразовые — если вы повторно отправляете один и тот же POST-запрос во время тестирования, каждый раз нужно генерировать новый токен.
Проверьте рассинхронизацию времени: некоторые провайдеры (особенно Altcha) отклоняют слишком старые challenge.
Ошибка "Invalid domain" или несоответствие sitekey
При работе с localhost убедитесь, что в списке разрешённых доменов указан именно localhost, а не 127.0.0.1.
Для Turnstile во время локальной разработки переключитесь на тестовый site key.
Виджет скрыт или перекрывается другими элементами
Виджеты CAPTCHA рендерятся в iframe с фиксированным z-index. Если у другого элемента (например, модального оверлея, липкого заголовка и т. п.) более высокий z-index, он может перекрывать виджет.
Задайте явный z-index для родительского контейнера или проверьте, не обрезает ли iframe свойство overflow: hidden у родительских элементов.
Замечание по доступности для людей с ограниченными возможностями: все четыре провайдера из этого руководства предлагают доступные альтернативы. reCAPTCHA и Turnstile поддерживают аудиопроверки; Prosopo и Altcha по умолчанию спроектированы так, чтобы свести неудобство для пользователя к минимуму и максимально снизить зависимость от визуальных головоломок.
Автоматизация и тестирование CAPTCHA с CapMonster Cloud
Когда ваша CAPTCHA-интеграция уже запущена, вам может понадобиться программное тестирование — для QA-пайплайнов, интеграционных тестов или автоматизированного мониторинга. Решать CAPTCHA вручную при каждом запуске тестов в большом масштабе нереалистично.
CapMonster Cloud — это AI-сервис для автоматизированного решения CAPTCHA, который поддерживает все четыре типа CAPTCHA, рассмотренные в этом руководстве: reCAPTCHA v2 (checkbox и invisible), Cloudflare Turnstile, Prosopo Procaptcha и Altcha. Он работает через простой API: вы отправляете задачу с URL целевой страницы и site key, а сервис возвращает готовый токен, который можно подставить в вашу форму.
Как это вписывается в рабочий процесс разработчика:
Автоматизированное интеграционное тестирование: запуск end-to-end тестов на формах, защищённых CAPTCHA, в CI/CD-пайплайнах без ручного участия.
Проверка QA: убедиться, что ваш бэкенд корректно валидирует и отклоняет токены при разных условиях.
Пайплайны сбора данных, где взаимодействие со страницами, защищёнными CAPTCHA, является частью авторизованного сценария.
CapMonster Cloud совместим с широко используемым API-интерфейсом, поэтому интегрируется со многими существующими фреймворками автоматизации с минимальной настройкой. Вы отправляете задачу, содержащую URL страницы и site key, опрашиваете API на предмет результата и получаете токен, который затем подставляете в форму как значение соответствующего скрытого поля.
Заключение
Интеграция CAPTCHA не требует сложной инфраструктуры — достаточно тега script, элемента виджета, правильной пары ключей CAPTCHA и серверной проверки токена. У каждого варианта из этого руководства есть свои сильные стороны: reCAPTCHA v2 — проверенное временем и широко используемое решение; Turnstile создаёт минимум неудобства для пользователя и лучше подходит с точки зрения приватности; Prosopo предлагает Web3-ориентированную альтернативу без зависимости от Google; а Altcha даёт полный контроль благодаря open-source инфраструктуре с самостоятельным хостингом.
Готовы начать? Выберите CAPTCHA, которая соответствует вашим требованиям к приватности, UX и инфраструктуре, зарегистрируйте свой site key и используйте примеры кода выше, чтобы встроить её в форму за считанные минуты. Если вам нужно автоматизировать тестирование или QA для защищённых форм, CapMonster Cloud поддерживает всех четырёх провайдеров и напрямую интегрируется в ваши существующие пайплайны.
NB: Пожалуйста, обратите внимание, что продукт предназначен для автоматизации тестирования исключительно ваших собственных веб-сайтов и ресурсов, к которым у вас есть законное право доступа.
Прокси для дискорда: типы, особенности и настройка для оптимальной работы
В этой статье вы узнаете зачем нужны прокси, какие есть типы прокси-серверов, и как всё это настроить, чтобы избежать банов и продолжать комфортную работу в Дискорде.