VPNの出口とブラウザの言語が食い違う理由
Accept-Languageは応答の言語を求め、VPNは送信元アドレスを変える。サイトがローカライズされて見えるとき、どちらが勝ったかを決めるのは三つの入力だ。
VPNについて何かを結論づける前に、開発者ツールを開き、ページを読み込み、リクエストヘッダーを読んでほしい。通常は特定の言語群を求めるAccept-Languageの行が見つかる。その行はブラウザの設定から来ており、出口アドレスから来るものではない。東京の出口にいるフランス語話者もフランス語を送り、フランス語で応答するサイトはそのヘッダーに応答している。ページが馴染みのある言語で届いただけでトンネルが漏れているわけではない。
まずヘッダーを読む
デスクトップのブラウザでネットワークパネルを開き、再読み込みし、ドキュメントのリクエストをクリックしてリクエストヘッダーの下を見る。ターミナルからもブラウザなしで同じものを見られ、値を上書きしてサイトの挙動を試せる。
curl -sS -D /tmp/h1 -o /tmp/b1 https://example.com
curl -sS -D /tmp/h2 -o /tmp/b2 -H 'Accept-Language: fr,en;q=0.6' https://example.com
grep -o 'lang="[^"]*"' /tmp/b1 /tmp/b2
diff /tmp/b1 /tmp/b2 | head -40
本文がディスク上にあるので、比較の対象はページであり、もしかすると一度も送られないヘッダーではない。htmlタグのlang属性と目に見えるテキストを見てほしい。Content-Languageは任意であり、多くのサーバーが省略するからだ。したがって同じURLでページ全体を英語からフランス語に切り替えるサイトは、ヘッダーだけの比較では変化がないように見える。出口が固定されたまま文書の言語がヘッダーに従うなら、ヘッダーが決定的な入力であり、その観察にVPNは関係ない。
このテストにはサイト自身の言語切り替えではなく、二つ目のブラウザプロファイルを使う。切り替えは通常クッキーを書き込み、それは別の入力なので、ヘッダーではなくクッキーを測ることになる。
q値が意味すること、しないこと
RFC 9110の12.5.4節はAccept-Languageを、応答に望ましい自然言語のリストとして定義する。各項目は0から1までの重みを持て、重みのない範囲の重みは1であり、重み0はその言語を受け入れ不能と示す。これは優先順位であり、それ以上ではない。
この値は位置の報告ではなく、信頼度の点数でも、身元でもない。サーバーはそれを無視しても、持っている唯一の翻訳を返しても、国によるリダイレクトを勝たせてもよい。コンテンツネゴシエーションはサーバーの選択であり、ヘッダーはその選択への入力であって命令ではない。
ローカライズされたページを位置のテストとして扱うとき、人々が見落とすのはこの点だ。ヘッダーはその人がどの言語を読むのを好むかを述べるものであり、好みはどこへでも移動できる。
実際に受け取る言語を決める三つの入力
外からはどれが勝ったか見えないので、一つずつ切り分ける。
- ヘッダー。 別の言語リストに設定した二つ目のプロファイルで試し、他を一定にしたままページが変わるかを見る。
- 保存された選択。 クッキーのないプライベートウィンドウで試すか、サイトのストレージを消す。アカウント設定やlocalStorageの項目は言語を何か月も固定しうる。
- URLまたはリダイレクト。
/fr/のような明示的な言語パスを要求し、送信元アドレスに基づくリダイレクトのステータスコードを観察して試す。
三つのテストをその順で実行し、どれが結果を動かしたかを書き留める。VPNを有効にした後に言語が変わる一度のページ読み込みは弱い証拠だ。リダイレクトもキャッシュされたクッキーも同じ印象を作りうる。
VPNが変えるもの、変えないもの
トンネルはサーバーが見る送信元アドレスを変え、それに伴いサーバーがIPの位置情報から導くものも変える。ブラウザの言語設定を書き換えたり、保存された設定を消したり、入力したURLを変えたりはしない。それらの入力は元の場所にとどまるので、出口が動いた後もページは古い言語のままでいられる。
位置情報には独自のノイズがある。アドレスのデータベースは互いに食い違い、ある国に登録された出口が別の国に割り当てられることがあり、国によるリダイレクトが、ブラウザとは無関係な理由で誤って見える。
短い確認で切り分けられる。ページを新しく要求し、提示しているアドレスを記録し、応答の言語をヘッダーのリストと比べる。言語が出口の国ではなくリストに一致するなら、ヘッダーが決定的な入力であり、トンネルに直すところはない。
ローカライズされたページが証明すること、しないこと
ここには実際のプライバシー上の論点があり、ふつう人が挙げるものより小さい。言語の好みの完全なリストは指紋の入力になり、あなたが誰か、何を読むかについて何かを明かしうる。それは好みの真正な開示であり、通信がトンネルから出たことの証明とは同じではない。
ローカライズされたページは漏えいの指標ではない。漏えいを本当に試したいなら、サイトが見る出口アドレス、名前解決に使われるリゾルバの経路、WebRTCスタックが露出させる候補を確認する。これらのテストは、ページの言語では答えられない問いに答える。
次にサイトがあなたの国を知っているように見えたら、まずリクエストヘッダーを開く。応答の言語がブラウザのリストに一致するなら、何も漏れていない。見るべき層は目の前にあるものだ。