Что такое подмена user-agent
Каждый HTTP-клиент может отправлять заголовок User-Agent, описывающий себя: название и версию браузера, имя crawler, идентификатор библиотеки. Этот заголовок заявляется самим клиентом. В HTTP нет проверки его достоверности, поэтому любой клиент может отправить любое значение. Подмена user-agent - это практика отправки значения, которое искажает, чем является клиент, например:
- скрипт автоматизации, представляющийся актуальным настольным браузером,
- парсер, заявляющий, что он - известный поисковый crawler, чтобы получить более благоприятное обращение,
- AI agent, использующий общий браузерный строковый идентификатор, чтобы его воспринимали как человека.
Почему это важно
Многие системы по-прежнему принимают решения на основе строки user-agent: добавляют в allowlist известных crawler, отдают разный контент bot или исключают автоматизацию из аналитики. Каждое из таких решений наследует слабость этого заголовка. Если политика говорит: "разрешать все, что утверждает, будто это crawler X", она разрешает и всех, кто скопирует строку crawler X.
Для приложений, получающих трафик от AI agent, это со временем становится еще важнее. Agents все чаще работают внутри реальных браузеров или headless browser frameworks, поэтому их строки user-agent выглядят в точности как строки человеческих браузеров. Другие идентифицируют себя честно. Сам по себе заголовок не может показать, кто есть кто. В нашей статье как определить, что трафик сайта приходит от AI agents, рассматриваются сигналы, которые работают лучше.
Более надежные доказательства, чем заголовок
- Криптографические подписи. С помощью HTTP Message Signatures и работ по Web Bot Auth клиент подтверждает, что у него есть ключ, опубликованный оператором, которого он называет. Скопированная строка user-agent не может воспроизвести подпись.
- Проверка, опубликованная оператором. Некоторые операторы crawler публикуют диапазоны IP или поддерживают обратную проверку DNS, что затрудняет подмену сильнее, чем один только заголовок. Google документирует проверку reverse DNS и диапазона IP для своих crawler, Microsoft предлагает инструмент Verify Bingbot, а OpenAI публикует файлы IP address для каждого из своих bots. В руководстве Anthropic для его hosted browser agent прямо сказано, что любой может отправить тот же самый заголовок User-Agent, и рекомендуется проверять опубликованные IP addresses.
- Проверки согласованности. Сравнение заявленного клиента с деталями протокола и сигналами взаимодействия может показать, когда заявление не совпадает с реальностью, хотя это дает вывод, а не доказательство.
- Учетные данные. Для API ключ API или token сообщает, какая учетная запись выполняет вызов, независимо от того, что написано в заголовке.
Распространенные заблуждения
- "User-agent браузера означает человека." Headless browsers и agent frameworks регулярно отправляют браузерные строки.
- "User-agent crawler означает именно этого crawler." Без подписи или проверки у оператора это всего лишь заявление.
- "Подмена всегда означает злой умысел." Некоторые легитимные инструменты отправляют общие строки, чтобы не получать сломанные страницы. Подмена - это повод меньше полагаться на заголовок, а не доказательство плохих намерений.
Как Proof of Actor обрабатывает строку user-agent
Proof of Actor записывает заявление user-agent как доказательство типа Declared: это то, что клиент сообщил о себе, и это может быть правдой, а может и нет. Сама по себе система никогда не повышает заявление до Verified. Запрос, единственным идентифицирующим доказательством которого является строка user-agent crawler, помечается соответствующим образом, а когда доказательств недостаточно, результатом становится Unknown, а не уверенное предположение. Затем ваши политики в Route могут по-разному обрабатывать подписанный verified agent и само-заявленный, например разрешать оба на read-only routes, но применять более строгие лимиты к declared.
См. как работают основы доказательств или подать заявку на ранний доступ.
Источники
- RFC 9110: HTTP Semantics, User-Agent: заголовок заявляется самим клиентом
- Google: Verifying Google's crawlers and fetchers: reverse DNS и проверка опубликованных диапазонов IP
- Microsoft Bing: Verify Bingbot tool: проверка, принадлежит ли IP address Bingbot
- OpenAI: Overview of OpenAI Crawlers: user agents и опубликованные файлы IP address
- Anthropic: how Anthropic-hosted browsers identify themselves: предупреждение, что заголовок User-Agent можно скопировать