User-agent なりすましとは
すべての HTTP クライアントは、自身を説明する User-Agent ヘッダー を送信できます。ブラウザ名とバージョン、クローラー名、ライブラリ識別子などです。このヘッダーは自己申告です。HTTP にはその内容が真実かどうかを確認する仕組みがないため、どのクライアントでも任意の値を送れます。User-agent なりすましとは、クライアントを誤って示す値を送る行為です。たとえば次のようなものです。
- 自動化スクリプトが最新のデスクトップブラウザであるかのように見せる
- スクレイパーが有名な検索クローラーを名乗って優遇を受けようとする
- AI エージェントが汎用的なブラウザ文字列を使い、人間として扱われるようにする
なぜ重要なのか
多くのシステムはいまでも user-agent 文字列をもとに判断します。たとえば、既知のクローラーを allowlist に入れる、bot に異なるコンテンツを配信する、分析から自動化を除外する、といった判断です。これらの判断はどれも、このヘッダーの弱さを引き継ぎます。もしポリシーが「crawler X を名乗るものはすべて allow する」としていれば、crawler X の文字列をコピーしたすべての相手を許可することになります。
AI エージェントのトラフィックを受けるアプリケーションでは、この問題は時間とともにより重要になります。エージェントは real browser や headless browser フレームワークの内部で動作することが増えており、その user-agent 文字列は人間のブラウザとまったく同じに見えます。一方で、正直に識別するものもあります。ヘッダーだけでは、どれがどれかは分かりません。AI エージェントからの website traffic かどうかを見分ける方法 の記事では、より有効なシグナルを扱っています。
ヘッダーより優れた証拠
- 暗号学的署名。 HTTP Message Signatures と Web Bot Auth の取り組みでは、クライアントは、自分が名乗る事業者が公開した鍵を保持していることを証明します。コピーされた user-agent 文字列では署名を再現できません。
- 事業者が公開する検証情報。 一部のクローラー事業者は IP 範囲を公開したり、reverse DNS の確認をサポートしたりしており、ヘッダーだけよりもなりすましを難しくしています。Google は自社クローラー向けに reverse DNS と IP range check を文書化しており、Microsoft は Verify Bingbot tool を提供し、OpenAI は IP address files を各 bot ごとに公開しています。Anthropic の hosted browser agent に関するガイダンス では、誰でも同じ User-Agent ヘッダーを送れることを明確に述べており、公開された IP アドレスの確認を勧めています。
- 整合性チェック。 申告されたクライアントをプロトコルの詳細や interaction signal と照合すると、その申告が合わない場合を示せますが、これは proof ではなく inference です。
- 認証情報。 API では、API key や token があれば、ヘッダーに何が書かれていても、どの account が呼び出しているか分かります。
よくある誤解
- 「browser の user-agent なら人間だ」。headless browser や agent framework は、普通に browser 文字列を送ります。
- 「crawler の user-agent ならその crawler だ」。署名や事業者による検証がなければ、それはただの申告です。
- 「なりすましは常に悪意がある」。正当なツールの中には、壊れたページを配信されないように汎用的な文字列を送るものがあります。なりすましはヘッダーの信頼を下げる理由であって、悪意の証明ではありません。
Proof of Actor が user-agent 文字列をどう扱うか
Proof of Actor は user-agent の申告を Declared の evidence として記録します。つまり、クライアントが述べた内容であり、真実である場合もあればそうでない場合もある、という扱いです。これを単独で Verified に格上げすることはありません。識別に使える evidence が crawler の user-agent 文字列だけの request は、そのようにラベル付けされます。evidence が不足している場合は、確信を持った推測ではなく Unknown になります。Route のポリシーでは、署名済みで verified な agent と自己申告の agent を別々に扱えます。たとえば、読み取り専用 route では両方を許可しつつ、Declared のものにはより厳しい制限を適用できます。
evidence basis の仕組み を見るか、早期アクセスに申し込む。
出典
- RFC 9110: HTTP Semantics, User-Agent: このヘッダーは client による自己申告
- Google: Verifying Google's crawlers and fetchers: reverse DNS と公開された IP range check
- Microsoft Bing: Verify Bingbot tool: IP address が Bingbot に属するかの確認
- OpenAI: Overview of OpenAI Crawlers: user agents と公開された IP address files
- Anthropic: how Anthropic-hosted browsers identify themselves: User-Agent ヘッダーはコピーできるという警告