Scarnox · Blog

Cloudflare Turnstile: как работает и как его решают (скоро)

Cloudflare Turnstile — это капча, которая обычно ничего не требует от посетителя. Она проводит проверки в браузере и в большинстве случаев проходит без всякой головоломки. Если система не уверена, она может показать короткий интерактивный шаг. Затем виджет записывает токен в форму, и сайт проверяет этот токен у Cloudflare. Поддержка Turnstile в Scarnox скоро появится. Этот гайд объясняет, как работает виджет, почему его часто путают с другими челленджами, и общие подходы для легитимной работы.

Как встраивается виджет

На странице есть контейнер с классом cf-turnstile и атрибутом data-sitekey. Скрипт Turnstile загружается, выполняет проверки и добавляет скрытое поле cf-turnstile-response. Значение этого поля — токен. Форма отправляет его вместе с остальными полями, а бэкенд сайта передаёт его в эндпоинт верификации Cloudflare вместе с секретным ключом сайта.

Как и у других токен-виджетов, верификация происходит на сервере. Форма, которая принимает любое значение в этом поле без проверки, на самом деле не защищена.

Режимы и что они значат для скрипта

Turnstile может работать в нескольких режимах. В управляемом режиме Cloudflare решает, показывать ли интерактивный шаг. В неинтерактивном режиме виджет ничего не просит у посетителя и только показывает статус. В невидимом режиме ничего не показывается вовсе. Для скрипта режим меняет то, что видно на странице, но результат тот же: токен в поле формы, который проверяется на сервере.

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

Почему он блокирует автоматизацию

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

Легитимные подходы

Вот подходы, которые работают для легитимной работы:

  1. Используйте настоящий браузер для страниц, на которых загружается Turnstile. Обычный профиль браузера с согласованными настройками реже получает проверку, чем урезанная сборка для автоматизации. Гайд по обнаружению headless-браузера перечисляет распространённые сигналы.
  2. Оставайтесь в сессии. Сохраняйте cookie между страницами вашего сценария, чтобы посетитель не выглядел новым на каждом запросе.
  3. Соблюдайте темп запросов. Ровный, человекоподобный темп снижает число проверок гораздо сильнее, чем любой отдельный трюк.
  4. Сначала прочитайте правила защищённого сайта. Многие защищённые сайты публикуют API или фид. Проверьте это, прежде чем строить сценарий в браузере. Гайд о парсинге сайтов за Cloudflare раскрывает подход глубже.
  5. Используйте тестовые ключи в разработке. Cloudflare публикует тестовые site key для разработки, которые дают предсказуемый результат без реальной проверки. Они предназначены для ваших интеграционных тестов, а не для продакшн-трафика.
  6. Спросите владельца. Если сайт ваш, вы можете настроить параметры Turnstile для путей, которые используют ваши автотесты. Если нет, попросите белый список или API.

Что будет делать решатель Turnstile

Токен-решатель Turnstile получает sitekey и URL страницы, формирует валидный токен для поля cf-turnstile-response и возвращает его вашему коду. Ваш код записывает токен в форму и быстро её отправляет. Это тот же шаблон, что и у живой интеграции PopularCaptcha, только с другим типом задачи.

Scarnox пока не решает Turnstile в реальном времени. Единственный живой тип задачи сегодня — PopularCaptcha, proxyless. Turnstile скоро появится, а детали запроса будут в справочнике API, когда поддержка выйдет. Не строите под предполагаемый интерфейс до того момента.

Частые ошибки

Интеграции Turnstile обычно ломаются предсказуемыми способами. Самая частая — использование токена после истечения срока или после того, как он уже был верифицирован. Токены одноразовые, поэтому повтор после неудачной отправки формы требует свежего результата виджета, а не старого значения. Вторая — sitekey от другого окружения. Ключ для разработки на продакшн-странице или наоборот даёт ошибку верификации, которая выглядит как баг в вашем коде. Прежде чем отлаживать что-либо ещё, проверьте, какой ключ использует страница.

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

Наконец, не зашивайте имя поля в код без проверки на живой странице. Input cf-turnstile-response — стандарт, но сайт может обернуть виджет иначе, и чтение отрисованной формы быстрее, чем догадки.

Парсите ответственно

Парсинг сайта, защищённого Turnstile, — обычная задача, и ей нужна та же осторожность, что и любому парсингу. Проверьте robots.txt и условия использования. Держите низкую частоту запросов и не собирайте персональные данные, которые вам не нужны. Если у сайта есть API, предпочитайте его. Гайд о законности парсинга отвечает на основные вопросы.

Подготовка

Создайте аккаунт: вы начнёте с пробного баланса, карта не нужна. Когда поддержка Turnstile выйдет, вы сможете протестировать её на собственных страницах, прежде чем запускать что-либо на живом сайте.

Что дальше