Документация Запланировать пилот

Turnstile

Turnstile, виджет проверки от Cloudflare, выдаёт токен, когда браузер посетителя проходит набор неинтерактивных проверок. Затем бэкенд сайта подтверждает этот токен через API siteverify. На этой странице описаны режимы виджета, жизненный цикл токена, документированные лимиты и требования к интеграции.

Управление документом

Дана, технический писатель в Integrity
Дана
Технический писатель, Integrity Czech Republic s.r.o.

Управление документом. Поставщик: Cloudflare, Inc. Владелец документа: Dana, технический писатель, Integrity Czech Republic s.r.o. Последняя проверка: 2026-08-31. Снимок содержимого упомянутой документации Cloudflare: 2026-08-28. Приведённые здесь значения сверены с источниками, перечисленными в разделе References, на указанные там даты. Cloudflare меняет лимиты и состав тарифов без предупреждения, поэтому проверяйте значение в источнике, прежде чем закладывать его в архитектуру.

Обзор

Turnstile служит механизмом проверки для веб-форм и эндпоинтов: вместо интерактивной головоломки он выполняет набор проверок в браузере посетителя. При успешном прохождении создаётся токен; сайт отправляет его со своего бэкенда на эндпоинт siteverify Cloudflare и получает подтверждение, что проверка пройдена именно для этого сайта.

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

Cloudflare указывает, что Turnstile не показывает изображений или текста для распознавания (https://developers.cloudflare.com/turnstile/, дата обращения 2026-08-28). В режиме Managed посетителю может быть предложено одно действие, например установка флажка. Доля посетителей, которым предлагается такое действие, зависит от сайта и здесь не приводится: долю решённых проверок для вашего развёртывания показывает аналитика виджета.

Влияние трения в форме на конверсию зависит от сайта и методики измерения, поэтому цифр здесь нет. Если этот показатель важен, измерьте долю завершённых отправок на своих формах до внедрения и после него.

Архитектура

Внедрение Turnstile состоит из трёх частей:

  1. Виджет. Небольшой компонент на JavaScript, встроенный в страницу и настроенный с помощью открытого sitekey. Он выполняет проверки прямо в браузере: вычисления proof of work на JavaScript, проверку согласованности браузерного окружения и поведенческие сигналы. Сайт при этом не обязан работать через Cloudflare.
  2. Токен. При успешной проверке виджет записывает токен в форму или возвращает его через функцию обратного вызова. Токен подтверждает, что проверка пройдена для конкретного sitekey.
  3. Проверка на стороне сервера. Бэкенд отправляет токен вместе с секретным ключом на https://challenges.cloudflare.com/turnstile/v0/siteverify. Ответ сообщает об успехе или неудаче, содержит коды ошибок, имя хоста и метку времени проверки. Бэкенд должен принимать отправленное действие только после успешной валидации.

Защиту даёт именно серверный шаг. Токен в запросе, который никто не проверяет, ничего не доказывает: тело запроса контролирует клиент. По документации Cloudflare токен действует 300 секунд и проверяется один раз, поэтому повторная валидация того же токена завершается ошибкой (https://developers.cloudflare.com/turnstile/get-started/server-side-validation/, дата обращения 2026-08-28). idempotency_key можно передать, если тот же токен нужно проверить ещё раз при повторной попытке.

В зонах, проксируемых через Cloudflare, Turnstile может дополнительно выдавать pre-clearance. Посетитель, прошедший виджет, в течение срока действия clearance не получает проверок от правил WAF и Bot Management.

Возможности

ВозможностьПоведениеДоступностьИсточник
Режим ManagedНужно ли действие со стороны посетителя, решает Cloudflare. Большинство сессий проходит без него, у части посетителей запрашивается одно действие, например установка флажка.Все аккаунты.Типы виджетов
Режим Non-interactiveВидимый виджет, который никогда не требует действий от посетителя.Все аккаунты.Типы виджетов
Режим InvisibleВидимого виджета нет: проверка выполняется без отображаемого элемента.Все аккаунты.Типы виджетов
Неявная и явная отрисовкаАвтоматический рендеринг из элемента контейнера или программный рендеринг через turnstile.render() для динамических форм и одностраничных приложений.Все аккаунты.Рендеринг на стороне клиента
Проверка на стороне сервераЭндпоинт siteverify возвращает success, коды ошибок, hostname, action, cdata и метку времени проверки.Все аккаунты.Проверка на стороне сервера
Привязка к имени хоста и действиюВиджет привязан к настроенным именам хостов, а action и cdata можно задать на стороне клиента и проверить в ответе валидации.Все аккаунты.Настройка виджета
Pre-clearanceВыдаёт clearance cookie, чтобы правила WAF и Bot Management не запрашивали повторную проверку в течение сессии в проксируемой зоне.Защищаемый сайт должен быть проксирован через Cloudflare.Pre-clearance
Ephemeral IDsВозвращает в ответе проверки периодически меняющийся идентификатор. По нему можно связывать повторные попытки одного и того же клиента, не сохраняя персональные данные.Все аккаунты.Ephemeral IDs
АналитикаДоля успешных прохождений, число проверок и показатели работы виджета по каждому sitekey.Все аккаунты.Аналитика Turnstile

Модель настройки

Объект конфигурации и есть виджет: он определяется значением sitekey и связан с секретным ключом. Настройки виджета:

На стороне клиента для каждого экземпляра виджета задаются action (метка, по которой видно, с какой формы получен токен) и cdata (непрозрачное значение, которое возвращается в ответе валидации). Оба значения возвращает siteverify, и оба нужно проверять: они привязывают токен к операции, для которой он выдан.

Cloudflare публикует тестовые sitekey и секретные ключи, которые всегда проходят проверку, всегда её проваливают или всегда требуют действия посетителя. Используйте их в автотестах вместо того, чтобы отключать проверку в тестовых окружениях: отключённая ветка проверки нередко попадает и на боевой сайт.

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

Лимиты и ограничения

Документированные ограничения (проверено 2026-08-31 по https://developers.cloudflare.com/turnstile/plans/):

ЛимитСтандартныйEnterprise
Виджетов на аккаунт20Без ограничений
Имён хостов на виджет10200
Глубина аналитики7 дней30 дней

Поведение токена, по материалам https://developers.cloudflare.com/turnstile/get-started/server-side-validation/, дата обращения 2026-08-28: токен действителен 300 секунд, и проверить его можно только один раз, если не передан idempotency_key.

Дополнительные ограничения:

Доступность по планам

УровеньВключено
СтандартныйДоступно бесплатно, в том числе для коммерческих сайтов, в пределах документированных ограничений: 20 виджетов на аккаунт, 10 имён хостов на виджет и 7 дней глубины аналитики. План зоны Cloudflare не требуется.
EnterpriseНеограниченное количество виджетов, до 200 имён хостов на виджет, глубина аналитики 30 дней, а также дополнительные возможности и поддержка по договору.
Pre-clearanceЗащищаемый сайт должен быть проксирован через Cloudflare, тарифный план зоны при этом может быть любым.

Актуально на 2026-08-31 по данным https://developers.cloudflare.com/turnstile/plans/. Лимиты и состав тарифов меняются без уведомления. Прежде чем закладывать эти значения в архитектуру, сверьтесь с первоисточником.

Развёртывание

Предварительные требования.

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

Настройка.

  1. Создавайте по одному виджету на логическое приложение, а не на каждую форму, и настраивайте для него имена хостов.
  2. Укажите action для каждой формы, чтобы токены можно было соотнести с ней, и проверяйте его в ответе валидации.
  3. Реализуйте серверную проверку в каждом сервисе, который принимает защищённые отправки. Отсутствующий или недействительный токен считайте поводом отклонить запрос.
  4. Проверьте hostname и action в ответе siteverify, а не только поле success.
  5. Режим виджета выбирайте отдельно для каждой формы: invisible или non-interactive там, где это допускает уровень злоупотреблений, и managed там, где не допускает.
  6. Обрабатывайте на клиенте функции обратного вызова для истечения срока действия токена и для ошибок, чтобы посетитель, который долго заполняет форму, получал новый токен, а не непонятную ошибку.
  7. Если сайт проксируется через Cloudflare, включите pre-clearance и используйте Turnstile вместе с правилами ограничения частоты запросов, а при наличии лицензии и с правилами для ботов.
  8. Удаляйте прежнюю интеграцию CAPTCHA и её ключи только после того, как новый сценарий проверен.

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

Верификация.

Откат. Отключите отклонение на бэкенде: прежнее поведение приёма вернётся без выпуска новой версии фронтенда. Виджет пусть продолжает отображаться, пока вы разбираетесь в причине. Кодовый путь предыдущего механизма защиты сохраняйте до тех пор, пока не убедитесь в стабильности развёртывания.

Вопросы эксплуатации

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

После развёртывания следите за смещением активности. Когда защищённая форма становится слишком дорогой для атакующего, нагрузка обычно уходит на незащищённую точку входа: мобильный API или устаревший путь. Включите такие точки входа в проверку.

Меняйте секретный ключ по заранее заданному графику, а также после любого инцидента, затронувшего бэкенд. Храните его вместе с остальными секретами, а не в файлах конфигурации.

Проектируя многошаговые формы, учитывайте срок жизни токена. Токен, выданный в начале длинного сценария, к моменту отправки формы может выйти за пределы своих 300 секунд. В этом случае запускайте проверку заново прямо перед отправкой.

Следите за тем, сколько имён хостов настроено на каждом виджете, и сверяйтесь с документированным лимитом: если виджет уже достиг предела, добавление домена завершится ошибкой на этапе настройки, а не во время работы.

Заранее предусмотрите такие сбои: релиз фронтенда, из которого пропало поле с токеном; релиз бэкенда, переставший вызывать siteverify; изменение политики безопасности контента, которое блокирует скрипт виджета; список имён хостов виджета, в котором нет нового домена или который достиг задокументированного предела.

Известные особенности

Взаимодействие с другими продуктами

В проксируемой зоне pre-clearance от Turnstile учитывают и пользовательские правила WAF, и правила Bot Management. Поэтому посетитель, прошедший проверку один раз, в течение срока действия clearance повторную проверку не получает.

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

Для вызова siteverify достаточно обычного HTTPS-запроса, поэтому его можно выполнить из любого бэкенда, в том числе из Cloudflare Worker перед origin-сервером. Тогда валидация происходит на границе сети, а не в приложении.

Ephemeral ID, которые возвращает siteverify, можно сопоставлять с признаками злоупотреблений на стороне приложения, не сохраняя при этом ни адрес, ни постоянный идентификатор.

Turnstile не зависит от настроек DNS и зоны, поэтому его можно развернуть на сайте с любым хостингом, а позже, если сайт переедет, дополнить проксированием Cloudflare.

Часто задаваемые вопросы

Обязателен ли вызов на стороне сервера? Да. Без вызова siteverify токен остаётся непроверенными данными от клиента, и виджет не даёт никакой защиты.

Сколько действует токен и можно ли проверить его дважды? Cloudflare указывает срок действия 300 секунд и одну проверку на токен. Передавайте idempotency_key при повторной попытке проверки того же токена.

Обязательно ли сайт должен работать через Cloudflare? Нет. Виджет и siteverify работают на любом сайте. Проксирование через Cloudflare нужно только для pre-clearance.

Как заменить интеграцию с reCAPTCHA? На стороне клиента виджет поддерживает неявную и явную отрисовку, а на сервере меняются адрес проверки и секретный ключ. Обе стороны нужно менять вместе, а прежние ключи удалять только после того, как новый путь проверен.

Источники

Снимок содержимого: 2026-08-28. Ограничения перепроверены 2026-08-31.

История изменений

ДатаИзменениеАвтор
2026-08-31Переписано как технический справочник: убран маркетинговый стиль, добавлены таблицы лимитов и доступности по тарифным планам со ссылками на источники, числовые данные сверены с документацией Cloudflare.Команда документации Integrity
2026-08-28Первая публикация.Команда документации Integrity

Содержание

51 страница, воспроизведённая из документации Cloudflare по turnstile.

Pages

Дополнительные настройки

Основные понятия

Расширения

Начало работы

Переход

Справочник

Устранение неполадок

Turnstile Analytics

Руководства

Запросите бесплатный пилот

Запланировать пилот