Что такое User-Agent и почему ему нельзя верить
Содержание
Поделиться
User-Agent — заголовок HTTP, строка, по которой сервер узнаёт приложение, операционную систему, поставщика и версию клиента. Ей нельзя верить как удостоверению личности: строку составляет сам клиент, её можно сузить и подделать, а чужой краулер может подставить текст робота. Скликивание по одному этому заголовку не определяется.

RFC 9110 от июня 2022 года описывает User-Agent как сведения о программе, которая отправила запрос. Серверы используют его, чтобы сузить отчёты о несовместимости, обойти ограничения конкретной программы и смотреть статистику браузеров и систем. Клиенту следует слать заголовок в каждом запросе, если его специально не отключили. Значение — один или несколько идентификаторов продукта с необязательной версией. Клиенту не следует класть в заголовок без нужды мелкие подробности и чужие субпродукты: слишком подробная строка растит задержку и риск, что пользователя узнают против его воли. В разделе о безопасности RFC пишет, что по строке теоретически проще целиться в известную дыру, а на практике перебор дыр идёт независимо от заявленной версии. Примеры строк в RFC — иллюстрация грамматики, не признак бота.
Строку урезают и подменяют
MDN пишет, что исторически строка слишком хорошо выделяла конкретный браузер, поэтому браузеры отдают урезанный набор: версия платформы и модель устройства фиксируются, а младшие номера версии Chrome показываются нулями. Подробности сервер может запросить отдельно, через client hints. Примеры строк конкретных браузеров на странице MDN в признак бота не превращаются: это иллюстрации формата.
Документация Google пишет, что строку User-Agent робота Google часто подставляют другие краулеры. Проверять запрос нужно обратным DNS по IP или сверкой IP со опубликованными диапазонами, а не по тексту заголовка. Обычные краулеры Google при автоматическом обходе соблюдают robots.txt. Краулеры особых случаев могут его не соблюдать. Загрузчики, которые запускает сам пользователь, robots.txt игнорируют, потому что запрос инициировал человек. Совпадение текста с именем Googlebot поэтому не доказывает, что пришёл Googlebot.
В отчёте Метрики «Роботы» путь «Отчёты → Мониторинг → Роботы». Срабатывание поведенческого правила показывается отдельной строкой без расшифровки правила. Остальные строки подписаны именем из User-agent. Подпись в отчёте — имя из заголовка, не проверка обратным DNS, которую Google просит для своих роботов.
Когда строка входит в рутинное опознание
Дополнение MRC к стандартам детекции недействительного трафика, финальная редакция июня 2020 года, делит IVT на два класса. GIVT — трафик, который опознаётся рутинно: списками или стандартными проверками параметров. В примерах — известный трафик дата-центров, который стабильно даёт недействительную активность, но не артефакты маршрута живых пользователей; боты, пауки и другие краулеры; проверки по параметрам транзакции; небраузерный User-Agent; предзагрузка, после которой объявление живой человек не открыл; заведомо негодные размеры размещения 0×0 и 1×1; сессии, которые по данным клиента не могут отрисовать изображение, в том числе headless-браузер.
Список примеров дан для аудита аккредитации MRC. Его не следует смешивать с таксономией TAG. Доля GIVT в Директе этим перечнем не задана. Небраузерный User-Agent в примерах — один из рутинных признаков класса, не единственное основание резать клик и не инструкция кабинета.
Заметка W3C делит съём на пассивный и активный. Пассивный читает то, что и так лежит в запросе, без кода у клиента: cookie, набор заголовков HTTP, адрес и прочие сетевые данные. В пример пассивного канала поставлен User-Agent: он обычно называет браузер, движок, версию и операционную систему. Активный запускает на клиенте JavaScript или другой код. Заметка пишет, что приёмы на CSS уже догоняют JavaScript. В примеры активного съёма входят размер окна, перечисление шрифтов и подключённых устройств, замер производительности, датчики и отрисованные узоры. Активный съём в принципе заметен на клиенте. Черты чаще уезжают на сервер пачкой, и сервер складывает их уже незаметно для страницы. Перечень — иллюстрация классов, не список полей, по которым принимают решение о визите.
Проверка визита собирает решение из нескольких независимых наблюдений: поведение на странице, окружение браузера, сеть и адрес, частота запросов и параметры рекламного перехода. Одно наблюдение не знает о правилах остальных. Состав полей, баллы и правила отдельных проверок не публикуются. User-Agent может лежать среди данных запроса как пассивный канал, но одно это наблюдение правил остальных не знает и решение само не выносит.
Недействительный клик поэтому не равен «странной строке User-Agent». Вопрос, вернёт ли Яндекс деньги, строка заголовка не закрывает. Кто кликает без покупки, — в статье о том, кто скликивает рекламу. Разница терминов — в статье про кликфрод и скликивание.
Верить заголовку как имени программы нельзя: его пишет клиент, браузеры его урезают, а текст Googlebot часто подставляют другие. Проверка робота Google идёт по IP и обратному DNS. Решение по визиту собирается из нескольких наблюдений, и одно из них не заменяет остальные.