ClaudeSignal

技术博客

浏览器指纹如何暴露你的地区信息?完整技术解析

你的浏览器正在通过一系列看似无害的小信号暴露你的地理位置。本文深入解析 10 项客户端指纹信号的检测原理,以及它们如何组合成一个完整的地区画像。

为什么浏览器指纹能暴露地区

当你安装操作系统时,会做出一系列区域相关的设置选择:时区、语言、数字格式、日期格式等。这些设置不是孤立存在的——它们通过浏览器的 JavaScript API 暴露给任何网页。

更重要的是,你的硬件和软件环境也携带了地区线索。系统安装了哪些字体、使用什么 GPU、屏幕 DPI 是多少、Emoji 怎么渲染——这些信息组合起来,形成了一个非常明确的地区画像。

ClaudeSignal 的核心原理就是收集这些信号并加权计算,得出一个 0-100 的风险分。本文将逐一解释每项信号的技术原理。

信号 1:系统时区(权重 25)

时区是权重最高的单一客户端信号。检测方法非常简单:

Intl.DateTimeFormat().resolvedOptions().timeZone 返回 IANA 格式的时区名称,例如 Asia/Shanghai。这个名称直接反映操作系统的时区配置。

new Date().getTimezoneOffset() 返回 UTC 偏移分钟数。北京时间返回 -480,美东时间返回 300(冬季)或 240(夏季)。

为什么时区信号最强?因为它是操作系统级设置,用户安装系统后很少主动修改。而且,修改时区可能破坏其他信号的一致性。

ClaudeSignal 还会检查偏移值与 IANA 名称是否一致。如果不一致,可能表明浏览器环境被人为修改过。

信号 2:浏览器语言(权重 15)

通过 navigator.languagenavigator.languages 读取。浏览器语言通常在安装操作系统时设置,中国用户一般设置为 zh-CN,美国用户设置为 en-US。

浏览器语言信号的特殊之处在于它反映的是用户的语言习惯,而不仅仅是地理位置。一个在美国工作的中国开发者可能仍然使用 zh-CN 浏览器语言。

ClaudeSignal 还会解析语言标签中的区域代码。例如 zh-CN 中的 CN 表示中国大陆,zh-TW 中的 TW 表示台湾,en-GB 中的 GB 表示英国。

信号 3:地区字体(权重 12)

字体检测是技术含量最高的信号之一。ClaudeSignal 使用 Canvas API 测量特定字符的渲染宽度来推断系统安装了哪些字体。

原理是:不同字体对同一个字符的渲染宽度不同。例如,中文字符"国"在 PingFang SC 和 Arial 中的渲染宽度差异明显。通过测量一组特定字符的 Canvas 宽度,可以推断系统是否安装了中文字体。

常见中文字体包括:PingFang SC(macOS)、Microsoft YaHei(Windows)、Noto Sans CJK(Linux/Android)。如果这些字体被检测到,ClaudeSignal 会将其作为中国地区画像的重要信号。

信号 4-6:Intl 区域、WebGL/GPU、数字格式

Intl 区域(权重 8):通过 Intl.DateTimeFormat().resolvedOptions().locale 读取,反映浏览器的区域偏好设置。

WebGL/GPU 渲染器(权重 8):通过 WEBGL_debug_renderer_info 扩展读取 GPU 型号。虽然 GPU 本身不直接暴露地区,但某些型号在特定市场的占有率更高。例如 Apple M 系列芯片主要出现在 macOS 设备上,而特定型号的 NVIDIA GPU 在某些地区的游戏市场更常见。

数字格式(权重 5):通过 Intl.NumberFormat 检测。中国和美国使用 1,234.56 格式(逗号分隔千位,点号分隔小数),而德国和法国使用 1.234,56 格式(相反)。

信号 7-10:日期格式、键盘、DPI、Emoji

日期格式(权重 5):通过 Intl.DateTimeFormat 检测日期排列顺序。中国和日本使用年月日(YMD),美国使用月日年(MDY),欧洲大部分地区使用日月年(DMY)。

键盘布局(权重 4):通过 Keyboard API 检测。QWERTY 是最常见的布局(美国、中国、英国等),QWERTZ 是德国标准,AZERTY 是法国标准。

屏幕 DPI(权重 3):通过 window.devicePixelRatio 读取。Retina 屏幕(DPR 2)在东亚市场的普及率高于某些其他地区。

Emoji 渲染(权重 2):通过 Canvas 测量 Emoji 字符的渲染宽度。不同操作系统(iOS、Android、Windows、macOS)渲染 Emoji 的方式不同,而某些 Emoji 样式在特定地区更常见。

信号如何组合成画像

单个信号的说服力有限。时区 Asia/Shanghai 可能只是一个巧合,但如果同时满足:浏览器语言 zh-CN + 中文字体 PingFang SC + Intl 区域 CN + 日期格式 YMD,那么所有信号指向同一地区的概率就非常高。

ClaudeSignal 的加权算法将这 10 项客户端信号加上 4 项服务端信号综合计算。当多个独立信号同时命中同一个国家时,总分会显著升高。这种"信号叠加"正是地区画像的核心原理。

想亲自验证?运行 ClaudeSignal 检测器,查看你的浏览器暴露了哪些地区信号。