User-Agent の情報量削減

ブラウザが提供するデータを制限して機密情報が含まれないようにし、フィンガープリントを削減します。

Published on Updated on

Translated to: English

実装ステータス

User-Agent の情報量削減とは

User-Agent(UA)の情報量削減とは、パッシブフィンガープリントに使用される可能性のある User-Agent 文字列中の識別情報を最小限に抑える取り組みです。この変更が展開されると、すべてのリソース リクエストには情報量が削減された User-Agent ヘッダーが含まれるようになります。その結果、いくつかの Navigator インターフェース navigator.userAgentnavigator.appVersionnavigator.platform など から返される値の情報量が削減されます。

ウェブ デベロッパーは、サイトのコードの中で User-Agent 文字列のインスタンスや使用に関係する部分を確認し、User-Agent 文字列の情報量削減に備える必要があります。User-Agent 文字列を解析することでデバイスのモデル、プラットフォームのバージョン、ブラウザのフルバージョンの情報を取得しているサイトの場合は、User-Agent Client Hints API の実装が必要になります。

User-Agent の情報量削減のスケジュールに関する最新情報をご確認ください

Key Term

User-Agent 文字列とは、HTTP リクエスト ヘッダーの一つです。これにより、サーバーやネットワークはユーザー エージェントのアプリケーション、オペレーティング システム(OS)、ベンダー、バージョンを識別できます。現在、User-Agent はすべての HTTP リクエストで提供され、JavaScript で内容を見ることができます。

User-Agent Client Hints(UA-CH)

User-Agent Client Hints を使用すると、User-Agent のすべてのデータを利用できます。ただし、サーバーが特定のデータに対する明確な必要性を能動的に宣言した場合に限ります。

受動的に開示されるユーザーデータを削除することで、リクエスト ヘッダーや JavaScript API などのメカニズムによって意図的に開示される情報の量を、より適切に調整し削減できます。

UA の情報量削減と UA-CH が必要な理由

現在 User-Agent 文字列は、HTTP リクエストごとに、ユーザーのブラウザ、オペレーティング システム、バージョンを示す大きな文字列データをブロードキャストしています。これには、次の 2 つの問題があります。

  • データが詳細かつ豊富であることから、ユーザーが特定される可能性がある
  • この情報がデフォルトで利用可能であることから、密かなトラッキングが行われる可能性がある

デフォルトで提供される情報を基本的なもののみにすることで、ユーザーのプライバシーを強化できます。

情報量削減後の User-Agent には、リクエストを送信したパソコンまたはモバイルのブラウザのブランドとメジャー バージョン、プラットフォームが含まれます。それ以外のデータを利用する場合は、User-Agent Client Hints を使用して、ユーザーのデバイスや状態に関する特定の情報をリクエストします。

さらに、User-Agent 文字列が長く複雑になったことで、文字列解析でエラーが発生しやすいという問題も生じています。UA-CH を使用すれば、構造化された信頼できるデータが提供され、解釈が容易になります。UA 文字列解析のための既存のコードがエラーになることはないはずですが、返される情報量は少なくなります。特定の情報が必要なサイトの場合は、UA-CH への移行が必要になります。

情報量削減後の UA と UA-CH の機能

情報量削減後の UA と UA-CH がどのように機能するかについて、簡単な例を次に示します。より詳細な例については、User-Agent Client Hints によるユーザーのプライバシーとデベロッパーエクスペリエンスの改善をご覧ください。

  1. ユーザーがブラウザを開き、アドレスバーに「example.com」と入力します。

  2. ブラウザがウェブページを読み込むためのリクエストを送信します。

    1. ブラウザは、User-Agent ヘッダーに情報量が削減された User-Agent 文字列を含めます。例: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36

    2. ブラウザは、デフォルトの User-Agent Client Hints ヘッダーにこれと同じ情報を含めます。次に例を示します。

      Sec-CH-UA: "Chrome"; v="93"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
  3. サーバーは、Accept-CH レスポンス ヘッダーを使用して、追加の Client Hints を送信するようブラウザにリクエストできます。例: Accept-CH: Sec-CH-UA-Arch

  4. ブラウザは、ポリシーとユーザー設定に照らして、その後のリクエスト ヘッダーでサーバーに返すことができるデータを決定します。次に例を示します。

    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Arch: "arm"

Critical Client Hints

最初のリクエストで特定の Client Hints のセットが必要な場合は、Critical-CH レスポンス ヘッダーを使用します。Critical-CH の値は、Accept-CH でリクエストされた値のサブセットである必要があります。

たとえば、最初のリクエストに Device-MemoryViewport-Width に関するリクエストが含まれていたとします。ここでは、Device-Memory が必要不可欠とします。

GET / HTTP/1.1
Host: example.com

HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Device-Memory, Viewport-Width
Vary: Device-Memory, Viewport-Width
Critical-CH: Device-Memory

Accept-CH ヘッダーが処理された後にクライアントが Critical Hints を送信した場合、クライアントはリクエストを再試行します。

要約すると、Accept-CH はページにあると望ましいすべての値をリクエストするのに対し、Critical-CH はページを適切に読み込むために必要不可欠な一部の値のみをリクエストします。詳しくは、Client Hints の信頼性に関する仕様をご覧ください。

UA の情報量削減に備える方法

Stable 版 Chrome で情報量削減後の User-Agent が大規模に利用可能になるのに合わせて、User-Agent 文字列のインスタンスや使用に関係するサイトのコードをご確認ください。User-Agent 文字列を解析することでデバイスのモデル、プラットフォームのバージョン、ブラウザのフルバージョンの情報を取得しているサイトの場合は、UA-CH API の実装が必要になります。

UA-CH API に更新したら、User-Agent から想定どおりのデータが得られることを確認するためのテストを行います。テスト方法は 3 つありますが、いずれもこれまでより複雑です。

情報量削減後の User-Agent が大規模に利用可能になるのは、完全に情報量が削減された UA 文字列がすべての Chrome デバイスで提供されるようになるときです。この情報量削減は、2022 年第 2 四半期の Chrome のマイナー リリースで開始される予定です。

UA 文字列をローカルでテストする

情報量削減後の User-Agent をローカルでテストするには、次の方法を使用します。

  • chrome://flags/#reduce-user-agent フラグを有効化する
    • これにより、ローカルのブラウザがすべてのサイトから情報量削減後の user-agent 文字列のみを受信するよう(それがデフォルトの設定になる前に)設定できます。
  • 適切な user-agent 文字列と Client Hints を提供するようエミュレートされたデバイスを、DevTools で構成する
    • DevTools 画面の右上で > 設定 > [デバイス] > [カスタム デバイスを追加] をクリックし、必要な user-agent 文字列と User-Agent Client Hints 値の組み合わせを提供するようエミュレートされたデバイスを構成します。
    • DevTools 画面の左上で ALT_TEXT_HERE [デバイスのツールバーを切り替え] をクリックして DevTools の UI を開き、デバイスをエミュレートします。
  • Chrome を 「--user-agent="(ここにカスタム文字列を記述)"」付きで起動する

サイトのコード内で UA 文字列を変換する

既存の Chrome の User-Agent 文字列をクライアントサイドまたはサーバーサイドのコードで処理している場合、その文字列を新しい形式に変換することで互換性をテストできます。オーバーライドと置き換えによりテストすることも、新しいバージョンを作成して並列にテストすることもできます。

User-Agent の情報量削減スニペットで、正規表現の例をご確認ください。

オリジン トライアルで実際のユーザー トラフィックをテストする

Chrome オリジントライアルに登録することにより、ご使用のプラットフォームで実際のユーザートラフィックにおける情報量削減後の User-Agent をテストできます。

他のウェブサイトに埋め込まれるコンテンツ(つまり、サードパーティのコンテンツ)を作成している場合は、サードパーティのオリジントライアルに参加して複数のサイトにわたってこの変更をテストできます。Chrome オリジン トライアルに登録する際に「サードパーティ マッチング」のオプションを選択すると、サイトがサードパーティに埋め込まれるときにスクリプトを挿入できます。

意見交換とフィードバックの提供

詳細

Last updated: Improve article

We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.