Как работает reCAPTCHA v2 и как ее решать (скоро)
reCAPTCHA v2 — классическая капча Google. Она показывает чекбокс с надписью «Я не робот» и, когда не уверена в посетителе, добавляет задание с картинками. Решателю для нее нужно получить валидный токен ответа, который сайт может проверить у Google. Поддержка reCAPTCHA v2 в Scarnox скоро появится. Это руководство объясняет, как работает виджет, какие общие подходы используют люди сегодня и чего ожидать от решателя на основе токенов.
Scarnox пока не решает reCAPTCHA v2 в режиме онлайн. Единственный живой тип задачи сегодня — PopularCaptcha без прокси. Если вашему проекту нужна reCAPTCHA v2 прямо сейчас, описанные ниже подходы — реалистичные варианты.
Как работает виджет
Страница встраивает контейнер с атрибутом data-sitekey. Этот sitekey идентифицирует сайт для Google. Когда виджет загружается, он выполняет проверки в браузере, смотрит на поведение посетителя, cookie и историю, и отправляет оценку риска в Google.
Если оценка показывает низкий риск, чекбокс отмечается сам, а виджет записывает токен в скрытое поле g-recaptcha-response. Если риск выше, посетитель видит задание с картинками, например выбор плиток с определенным объектом. Успешное прохождение задания тоже записывает токен.
Серверная часть сайта затем отправляет токен в конечную точку проверки Google вместе с секретным ключом сайта. Google отвечает успехом или неудачей. Поскольку проверка происходит на сервере, форма, которая принимает токен без проверки у Google, фактически не защищена reCAPTCHA.
Почему запрос помечается
Чекбокс — это решение о риске, а не головоломка. Обычные триггеры:
- всплеск запросов с одного IP-адреса;
- новая сессия браузера без cookie и истории;
- окружение браузера, которое выглядит автоматизированным, например настройка headless по умолчанию;
- паттерн ввода, который не похож на движение мыши или печать человеком.
Понимание этих триггеров важнее самого виджета. Если ваш трафик не вызывает чекбокс, вы никогда не увидите задание с картинками.
Общие подходы, которые работают сегодня
Эти подходы широко используются и честны. Они снижают частоту появления задания в законной работе.
- Держите настоящие сессии. Переиспользуйте cookie и согласованный профиль браузера в течение сессии, а не начинайте заново на каждой странице.
- Соблюдайте паузы. Устойчивый, медленный темп выглядит гораздо больше как человек, чем всплеск.
- Используйте настоящий браузер для виджета. Полноценный браузер с обычными настройками реже помечается, чем урезанная headless-настройка. Руководство по обнаружению headless-браузера перечисляет распространенные сигналы.
- Попросите исключение или тестовый ключ. Если сайт ваш, используйте опубликованные Google тестовые ключи на стейджинге. Если нет, попросите владельца добавить вас в список разрешенных.
- Подключите человека. Для задач с малым объемом человек может отметить чекбокс и передать токен дальше. Это медленно, но надежно.
Эти подходы не гарантируют, что задание никогда не появится. Они снижают частоту, а это то, что поддерживает стабильность законной работы.
Что сделает решатель на основе токенов
Решатель reCAPTCHA v2 на основе токенов делает то же, что PopularCaptcha делает сегодня. Он берет sitekey и URL страницы, производит валидный токен g-recaptcha-response и возвращает его вашему коду. Затем ваш код вставляет токен в форму и отправляет ее до истечения срока токена.
Scarnox опишет тип задачи и дополнительные поля в справочнике API, когда появится поддержка reCAPTCHA v2. До тех пор не создавайте код на основе предполагаемого интерфейса. Структура запроса будет похожа на пример с PopularCaptcha, но точные значения сверяйте с документацией.
Чек-лист для задачи с reCAPTCHA v2
Когда планируете задачу с формой reCAPTCHA v2, проверьте следующие пункты:
- Сайт ваш? Если да, используйте тестовые ключи на стейджинге и держите тесты на продакшене минимальными.
- Задача законна? Сбор открытых данных и ваши собственные рабочие процессы законны; злоупотребление аккаунтами и спам — нет.
- Достаточно ли низка частота, чтобы чекбокс оставался спокойным?
- Есть ли у вас план на задание с картинками: человек или решатель, когда он появится в работе?
- Вы проверяете результат серверной проверки, а не только наличие токена?
Частые ошибки
Самая частая проблема в интеграции reCAPTCHA v2 — токен, который сайт отклоняет, хотя выглядит правильно. За большинством таких случаев стоят три причины. Первая — несовпадение sitekey и URL страницы: токен привязан к странице, где показали виджет, поэтому sitekey, взятый с одной страницы и отправленный на другую, не сработает. Вторая — устаревший токен. Токены живут недолго, поэтому скрипт, который решает сначала, а потом выполняет длинную последовательность других шагов, отправит истекшее значение. Третья — отсутствие серверной проверки с вашей стороны. Если ваши тесты только подтверждают наличие токена, вы не заметите, что шаг проверки падает.
Вторая группа ошибок возникает из-за рабочего процесса вокруг виджета. Частая ошибка — войти в одной сессии, а форму отправить из другой, потому что проверка может зависеть от сессии, которая загрузила виджет. Также повторная отправка отклоненной формы много раз подряд делает сессию подозрительной, и одно задание может превратиться в серию. Когда что-то падает, сделайте паузу, проверьте состояние страницы и попробуйте еще раз со свежими значениями.
Ответственный парсинг
Если форма входит в задачу парсинга, проверьте robots.txt и условия сайта перед началом. Держите низкую частоту и не собирайте персональные данные, которые вам не нужны. Руководство о законности парсинга описывает основные соображения.