logo
bars

Cloudflare Turnstile
и CapMonster Cloud

Решение капчи, установка на сайт и тестирование.
Вам достался «по наследству» сайт с подключённой капчей или другой защитой, но доступа к исходному коду нет? В такой ситуации возникают вопросы: какую именно систему защиты использует сайт, правильно ли она установлена и как проверить её работу?

В этой статье мы постарались дать ответы на все вопросы. А начать решение задачи нужно с определения того, какая система защиты используется. Для этого можно обратиться к списку популярных капч и систем антибот-защиты, где представлены визуальные примеры и ключевые признаки, которые могут помочь быстро определить, с чем вы имеете дело.

Если вы обнаружили, что на вашем сайте используется Cloudflare Turnstile, следующим шагом станет более подробное изучение её свойств и самой работы. Также в этой статье вы можете изучить инструкцию по подключению системы Cloudflare Turnstile, чтобы полностью разобраться, как она функционирует на вашем сайте. Это позволит не только понимать текущую защиту, но и грамотно планировать её поддержку.

Что такое Cloudflare Turnstile
Что такое Cloudflare Turnstile
Cloudflare Turnstile — это современная CAPTCHA от компании Cloudflare, защищающая сайты от автоматических действий. Для посетителей веб-ресурсов проверка почти незаметна, нет необходимости проходить задания: обычно достаточно одного клика по чекбоксу, после которого система решает, пропустить посетителя или заблокировать при подозрении на бота. В отличие от Cloudflare Challenge, капча Turnstile размещается непосредственно на сайте, а не в отдельном окне — обычно в форме авторизации или регистрации.

Как решить Cloudflare Turnstile через CapMonster Cloud

При тестировании форм с Cloudflare Turnstile часто возникает необходимость проверить работу капчи и убедиться, что она корректно интегрирована.

Вы можете вручную протестировать подставленную на ваш сайт капчу.

  • Откройте страницу с формой и убедитесь, что капча отображается.
  • Попробуйте отправить форму без её прохождения — сервер должен выдать ошибку.
  • После успешного решения капчи — форма должна отправиться без ошибок.

Для автоматического распознавания капчи можно использовать специализированные сервисы, например, CapMonster Cloud — инструмент, который принимает параметры капчи, обрабатывает их на своих серверах и возвращает готовый токен. Этот токен можно подставить в форму, чтобы пройти проверку без участия пользователя.

Работа с CapMonster Cloud через API обычно включает следующие шаги:

Создание задачи (Task)Создание задачи (Task)
arrow
Отправка запроса к APIОтправка запроса к API
arrow
Получение результатаПолучение результата
arrow
Подстановка токена на страницуПодстановка токена на страницу
arrow
Распознавание Cloudflare Turnstile с использованием готовых библиотек
Сервис CapMonster Cloud предоставляет готовые библиотеки для удобной работы на языках Python, JavaScript (Node.js) и C#.
Python
JavaScript
C#
Решение, подстановка токена и отправка формы
Пример на Node.js для полного цикла распознавания капчи на вашей веб-странице. Возможные подходы: использовать HTTP-запросы для получения HTML и параметров капчи, отправить ответ и обработать результат; или с помощью инструментов для автоматизации (например, Playwright) — открыть страницу, дождаться капчи, отправить параметры (для тестирования вы можете отправить как правильные, так и некорректные данные), получить решение через клиент CapMonster Cloud, подставить токен в форму и увидеть результат.
// npm install playwright @zennolab_com/capmonstercloud-client

import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from "@zennolab_com/capmonstercloud-client";

async function main() {
  // 1. Решение Turnstile через CapMonster Cloud
  const cmcClient = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: 'YOUR_CAPMONSTER_API_KEY' })
  );

  const turnstileRequest = new TurnstileRequest({
    websiteURL: 'http://tsmanaged.zlsupport.com',
    websiteKey: '0x4AAAAAAABUYP0XeMJF0xoy',
  });

  const result = await cmcClient.Solve(turnstileRequest);
  const token = result.solution.token;
  console.log('Токен Turnstile получен:', token);

  // 2. Запуск Playwright
  const browser = await chromium.launch({ headless: false });
  const context = await browser.newContext();
  const page = await context.newPage();
  await page.goto('http://tsmanaged.zlsupport.com');

  // 3. Заполняем логин и пароль
  await page.fill('#username', 'your_username');
  await page.fill('#password', 'your_password');

  // 4. Ждем появления скрытого поля token
  await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });

  // 5. Подставляем токен и делаем поле видимым
  await page.evaluate((t) => {
    const tokenInput = document.querySelector('#token');
    if (tokenInput) {
      tokenInput.type = 'text';  // делаем поле видимым
      tokenInput.value = t;      // вставляем токен
      console.log('Токен вставлен в поле token');
    } else {
      console.error('Поле #token не найдено');
    }
  }, token);

  // 6. Проверяем, что токен действительно подставился
  const checkValue = await page.$eval('#token', el => el.value);
  console.log('Проверка значения токена:', checkValue);

  // 7. Отправляем форму
  await page.click('button[type="submit"]');
  console.log('Форма отправлена с токеном Turnstile');

  // await browser.close();
}

main().catch(err => console.error(err));
Как подключить Cloudflare Turnstile к своему сайту
Чтобы уверенно ориентироваться в работе капчи на вашем сайте, понимать логику её проверки, заново подключить или перенастроить, рекомендуем вам изучить этот раздел. В нём описан процесс подключения защиты — это поможет быстро разобраться во всех нюансах.

1. Перейдите на страницу Cloudflare Turnstile, нажмите Начните сейчас.

2. Зарегистрируйтесь в сервисе.

3. В Turnstile Widgets нажмите на синюю кнопку Add Widget.

HowTo Connect image 1

4. Настройте Cloudflare Turnstile, укажите:

  • Widget name — название капчи (для удобства, например Login form).
  • Hostname Management — домены, где капча будет работать (например, example.com).
  • Widget Mode:
    • Managed — оптимальный вариант, капча решает сама, показывать ли галочку.
    • Non-interactive — проверка выполняется автоматически, без необходимости кликов.
    • Invisible — полностью невидимая.
  • Pre-clearance — ставьте Yes, если сайт через Cloudflare Proxy (чтобы не проходить капчу повторно).

5. После создания виджета, вы получите два ключа — Site Key и Secret Key.

HowTo Connect image 2

6. Подключите клиентскую часть

1) Подключите скрипт Turnstile

Автоматический рендеринг (виджет создаётся сам при загрузке страницы):

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Программное управление (вы сами создаёте виджет через JavaScript):

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>

Важно: скрипт должен загружаться с точного URL. Прокси или кэш могут вызвать сбои.

2) Создайте контейнер для виджета

Авто:

<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>

Программно:

<div id="turnstile-container"></div>

3) Настройка виджета

Через data-атрибуты:

<div class="cf-turnstile"
            data-sitekey="<YOUR_SITEKEY>"
            data-theme="light"
            data-size="normal"
            data-callback="onSuccess">
          </div>

Через JavaScript:

const widgetId = turnstile.render("#turnstile-container", {
  sitekey: "<YOUR_SITEKEY>",
  theme: "light",
  size: "normal",
  callback: token => console.log("Token:", token)
});

4) Работа с токенами

const token = turnstile.getResponse(widgetId);      // получить токен
const isExpired = turnstile.isExpired(widgetId);    // проверить истечение
turnstile.reset(widgetId);                          // сброс
turnstile.remove(widgetId);                         // удалить
turnstile.execute("#turnstile-container");         // запуск вручную

5) Интеграция с формой

<form id="my-form" method="POST">
  <input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
  <button type="submit">Отправить</button>
</form>

<script>
function onSuccess(token) {
  document.getElementById("cf-turnstile-response").value = token;
}
</script>

Пример кодаПример кода
arrow

6) Настройте серверную часть

Процесс серверной проверки:

  • Клиент: пользователь проходит Turnstile на странице → создаётся токен.
  • Форма отправляется: токен вместе с данными формы отправляется на сервер.
  • Сервер: делает POST-запрос к Cloudflare Siteverify API с токеном и секретом.
  • Cloudflare: возвращает JSON с результатом (success: true/false) и дополнительной информацией (action, hostname, время прохождения).
  • Сервер: решает, разрешить или отклонить действие пользователя.

API Siteverify:

POST
https://challenges.cloudflare.com/turnstile/v0/siteverify

Параметры запроса:

  • secret (обязательно): секретный ключ Turnstile из панели Cloudflare
  • response (обязательно): токен, полученный на клиенте
  • remoteip (необязательно): IP-адрес пользователя (рекомендуется)
  • idempotency_key (необязательно): уникальный UUID для защиты от повторных проверок

Особенности токена:

  • Максимальная длина: 2048 символов
  • Действует 5 минут
  • Одноразовый
  • При просрочке или повторной проверке API вернёт ошибку timeout-or-duplicate

Пример проверки на PHPПример проверки на PHP
arrow

Background
Возможные ошибки и отладка
Bug Icon
Неверные параметры
Капча не отображается или возвращает ошибки вроде invalid-input-secret, missing-input-response, invalid-input-response. Проверьте актуальность sitekey и secret key, а также настройки в Cloudflare Dashboard.
Bug Icon
Таймаут решения
Токен истёк (действует 300 секунд) или не получен вовремя. Убедитесь в стабильности соединения и корректной интеграции с API.
Bug Icon
Пустой или неверный токен
Параметр cf-turnstile-response отсутствует или некорректен. Проверьте передачу токена в форму и на сервер.
Bug Icon
Ответ success=false
Токен недействителен, просрочен или уже использован. Каждый токен можно проверить только один раз. Включите логирование запросов и ответов Siteverify для анализа.
Проверка устойчивости защиты
После интеграции важно убедиться, что система действительно защищает сайт от автоматических действий.
Рекомендации по безопасности и оптимизации
Проверяйте токен только на сервере, никогда не вызывайте Siteverify API с фронтенда — это раскроет ваш секретный ключ.
Используйте переменные окружения или систему управления секретами, а не храните ключи в коде.
Проверяйте дополнительные поля (<b>hostname</b>, <b>action</b>), чтобы убедиться, что запрос пришёл с вашего сайта.
Используйте HTTPS —  все обращения к Siteverify должны выполняться через защищённое соединение.
Реализуйте обработку ошибок — при недоступности API показывайте пользователю понятное сообщение без раскрытия внутренних данных.
Ограничивайте использование sitekey по доменам.
Добавьте в форму ссылки на <b>Политику конфиденциальности</b> и <b>Условия использования Cloudflare</b>, если это требуется вашей организацией или политикой конфиденциальности.
Заключение

Если вам достался сайт с уже установленной капчей или другой системой защиты и при этом нет доступа к коду — ничего страшного! Определить, какая именно технология используется, достаточно легко. А для проверки корректности работы можно использовать сервис распознавания CapMonster Cloud в изолированной тестовой среде, чтобы убедиться, что механизм обработки токенов и логика проверки функционируют корректно.

В случае с Cloudflare Turnstile — достаточно распознать систему, изучить её поведение и убедиться, что защита функционирует корректно. В статье мы показали, как определить Cloudflare Turnstile и где найти инструкции по её подключению или перенастройке, чтобы уверенно поддерживать защиту и контролировать её работу.

Conclusion