Cloudflare Turnstile: как работает и как его решают (скоро)
Cloudflare Turnstile — это капча, которая обычно ничего не требует от посетителя. Она проводит проверки в браузере и в большинстве случаев проходит без всякой головоломки. Если система не уверена, она может показать короткий интерактивный шаг. Затем виджет записывает токен в форму, и сайт проверяет этот токен у Cloudflare. Поддержка Turnstile в Scarnox скоро появится. Этот гайд объясняет, как работает виджет, почему его часто путают с другими челленджами, и общие подходы для легитимной работы.
Как встраивается виджет
На странице есть контейнер с классом cf-turnstile и атрибутом data-sitekey. Скрипт Turnstile загружается, выполняет проверки и добавляет скрытое поле cf-turnstile-response. Значение этого поля — токен. Форма отправляет его вместе с остальными полями, а бэкенд сайта передаёт его в эндпоинт верификации Cloudflare вместе с секретным ключом сайта.
Как и у других токен-виджетов, верификация происходит на сервере. Форма, которая принимает любое значение в этом поле без проверки, на самом деле не защищена.
Режимы и что они значат для скрипта
Turnstile может работать в нескольких режимах. В управляемом режиме Cloudflare решает, показывать ли интерактивный шаг. В неинтерактивном режиме виджет ничего не просит у посетителя и только показывает статус. В невидимом режиме ничего не показывается вовсе. Для скрипта режим меняет то, что видно на странице, но результат тот же: токен в поле формы, который проверяется на сервере.
Токены короткоживущие и одноразовые. Отправляйте форму сразу после того, как виджет выдал токен, и не используйте повторно токен, который уже прошёл верификацию.
Почему он блокирует автоматизацию
Turnstile анализирует сигналы браузерного окружения и поведение сессии. Стандартный headless-браузер, отсутствующий или несогласованный набор возможностей браузера, новая сессия без истории и подозрительный сетевой адрес могут подтолкнуть решение к проверке или блокировке. Сигналы того же семейства используются и в других проверках на основе оценки, поэтому подходы похожи.
Легитимные подходы
Вот подходы, которые работают для легитимной работы:
- Используйте настоящий браузер для страниц, на которых загружается Turnstile. Обычный профиль браузера с согласованными настройками реже получает проверку, чем урезанная сборка для автоматизации. Гайд по обнаружению headless-браузера перечисляет распространённые сигналы.
- Оставайтесь в сессии. Сохраняйте cookie между страницами вашего сценария, чтобы посетитель не выглядел новым на каждом запросе.
- Соблюдайте темп запросов. Ровный, человекоподобный темп снижает число проверок гораздо сильнее, чем любой отдельный трюк.
- Сначала прочитайте правила защищённого сайта. Многие защищённые сайты публикуют API или фид. Проверьте это, прежде чем строить сценарий в браузере. Гайд о парсинге сайтов за Cloudflare раскрывает подход глубже.
- Используйте тестовые ключи в разработке. Cloudflare публикует тестовые site key для разработки, которые дают предсказуемый результат без реальной проверки. Они предназначены для ваших интеграционных тестов, а не для продакшн-трафика.
- Спросите владельца. Если сайт ваш, вы можете настроить параметры 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 выйдет, вы сможете протестировать её на собственных страницах, прежде чем запускать что-либо на живом сайте.