User-Agent の情報量削減

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

公開日 更新日

翻訳先言語: 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 によるユーザーのプライバシーとデベロッパーエクスペリエンスの改善 をご覧ください。

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

  1. ブラウザがウェブページを読み込むためのリクエストを送信します。
    1. ブラウザは、User-Agent ヘッダーに情報量が削減された User-Agent 文字列を含めます。例: User-Agent: Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Mobile Safari/537.36
    2. ブラウザは、デフォルトの User-Agent Client Hints ヘッダーにこれと同じ情報を含めます。次に例を示します。
      Sec-CH-UA: "Chrome"; v="98"
      Sec-CH-UA-Mobile: ?1
      Sec-CH-UA-Platform: "Android"
  2. サーバーは、Accept-CH レスポンス ヘッダーを使用して、追加の Client Hints を送信するようブラウザにリクエストできます。例:Accept-CH: Sec-CH-UA, Sec-CH-UA-Mobile, Sec-CH-UA-Platform, Sec-CH-UA-Model
  3. ブラウザは、ポリシーとユーザー設定に照らして、その後のリクエスト ヘッダーでサーバーに返すことができるデータを決定します。次に例を示します。
    Sec-CH-UA: "Chrome"; v="93"
    Sec-CH-UA-Mobile: ?1
    Sec-CH-UA-Platform: "Android"
    Sec-CH-UA-Model: "Pixel 2"

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 header ヘッダーが処理された後にクライアントが 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 のマイナー リリースで開始される予定です。

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

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

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

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

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

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

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

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

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

Client Hints と Critical Hints のサポート

サーバーに返されるデフォルトの Client Hints は 3 つあります。これには、ブラウザー名とメジャー バージョン、ブラウザーがモバイル デバイス上にあるかどうかを示すブール値、およびオペレーティング システム名が含まれます。これらは TLS ハンドシェイクの後に送信されます。これらは既に利用可能で、ブラウザでサポートされています。

ただし、サイトをレンダリングするために重要な情報を取得する必要がある場合があります。

Critical Hints を最適化する

Warning

Critical Hints を使用することはめったにないはずなので、実装の理由を確認してください。考えるべきなのは、最初のページ読み込みで拡張データが必要かどうかです。この情報がないとページの読み込みに失敗しますか?

Transport Layer Security プロトコル (TLS) ハンドシェイクは、ブラウザーと Web サーバー間の安全な接続を確立するための最初のステップです。 Critical-CH レスポンス ヘッダーは、最初のリクエストが Critical Hints なしで送信された場合、ブラウザにリクエストをすぐに再試行するように指示するように設計されています。

Critical Hints を含む Client Hints のシーケンス図
サーバーから重要なヒントが要求されると、クライアントは重要なヒントを含む Web ページの最初のリクエストの送信を再試行します。この例では、 Sec-CH-UA-Modelのヒントが 2 回リクエストされます。1 回目はAccept-CHを使用した Client Hints として、2 回目はCritical-CHを使用した Critical Hints としてリクエストされます。

Critical Hints ( Critical-CHヘッダー) を最適化するには、このハンドシェイクをインターセプトし、Client Hints のモデルを提供する必要があります。これらの手順は複雑な場合があり、高度な知識が必要です。

ACCEPT_CH HTTP/2 および HTTP/3 フレームは、 TLS ALPS 拡張機能と組み合わせて、最初の HTTP リクエストに間に合うようにサーバーの Client Hints 設定を配信するための接続レベルの最適化です。これらには複雑な構成が必要なため、本当に重要な情報にのみ使用することをお勧めします。 BoringSSL (OpenSSL のフォーク) は、Chromium で Google の実験的な機能を操作するのに役立ちます。現時点では、ALPS はBoringSSL にのみ実装されています

Critical Hints を使用する必要がある場合は、 Critical Hints の信頼性と最適化に関するガイドを参照してください。

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

詳細

更新日 記事を改善する

This site uses cookies to deliver and enhance the quality of its services and to analyze traffic. If you agree, cookies are also used to serve advertising and to personalize the content and advertisements that you see. Learn more about our use of cookies.