什么是浏览器语言指纹识别?
浏览器与设备

什么是浏览器语言指纹识别?

navigator.languages暴露你的完整语言偏好列表,追踪者用它与时区、IP地理位置交叉核对,强化跨站识别。

8 分钟阅读·

浏览器语言指纹识别是一种追踪技术,它读取 navigator.languages—— 一个暴露你完整有序语言偏好列表的 JavaScript 属性—— 在不向设备存储任何内容的情况下构建你浏览器的持久标识符。 你现在就可以在 whatsmy.fyi 上查看你的浏览器究竟暴露了什么。

简要总结

每个浏览器都通过 navigator.languages 暴露你的语言偏好排序列表。 追踪者读取这个数组——结合时区、IP 地理位置和屏幕尺寸—— 来验证或强化你的浏览器指纹。单独来看,语言偏好是一个低熵信号。 与十几个其他信号结合后,它成为一个可靠的一致性校验, 即使清除了 Cookie,也能确认你是跨网站和跨会话的同一个人。

什么是浏览器语言指纹识别?

浏览器语言指纹识别是更广泛的 浏览器指纹识别 工具包中的一个组成部分。它利用两个密切相关的浏览器 API: navigator.languages (语言代码的有序数组)和 navigator.language(单一的最高优先级偏好)。 两者对页面上运行的任何 JavaScript 都可用,无需任何用户交互或权限。

让语言数据对追踪者有用的,并非其本身高度唯一——大多数英语用户报告["en-US", "en"]。 它的作用体现在两个方面:当组合不寻常时,它会增加指纹的熵; 同时它充当一致性信号,验证者会将其与 Accept-Language HTTP 请求头、 IP 地理位置和系统时区交叉核对。 这些层之间的任何不匹配本身就是一个追踪信号——可以标记 VPN 用户、浏览器模拟器和隐私工具。

电子前哨基金会的 Cover Your Tracks 工具将语言暴露作为其测量的 30 多个浏览器指纹信号之一, 并持续发现它在每款主流浏览器中都可读。

navigator.languages 如何工作?

navigator.languages 返回一个只读的 BCP 47 语言标签 数组,按从最高优先级到最低优先级排列。 每个标签遵循 语言-地区 格式——例如 en-USzh-CNja-JP。 第一个元素始终等于 navigator.language 的值。

该数组由你的浏览器语言设置填充,通常与操作系统配置的语言列表一致。 在 Chrome 和 Firefox 上,用户可以在浏览器设置中配置多种语言; 最终顺序会精确反映在 navigator.languages 中。 同一列表会在每次页面加载时作为 Accept-Language HTTP 请求头发送。

// 读取语言偏好——任何网站脚本均可访问
console.log(navigator.language);
// → "zh-CN"

console.log(navigator.languages);
// → ["zh-CN", "zh", "en-US", "en"]
// 每种语言偏好按优先级列出
// 添加了英语和中文备用选项的双语用户
// 比单语用户更容易被识别

// 浏览器在每个 HTTP 请求中发送相同的偏好:
// Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

// 指纹脚本将其与其他信号组合:
function getLanguageFingerprint() {
  return {
    language: navigator.language,
    languages: navigator.languages,
    // 交叉核对:语言与用户时区是否匹配?
    timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
    // 交叉核对:语言与系统区域设置是否匹配?
    locale: Intl.DateTimeFormat().resolvedOptions().locale,
  };
}
// 双语用户的输出:高熵
// 典型的 zh-CN 单语用户的输出:低熵,
// 但对一致性验证仍然有用

navigator.language 与 navigator.languages 的区别

这两个属性相关但不相同,追踪者会同时读取:

属性返回类型示例值指纹识别作用
navigator.language字符串"zh-CN"熵值低;与特定地区的大多数用户相匹配
navigator.languages字符串数组["zh-CN", "en-US", "ja"]熵值更高;不寻常的组合具有显著区分度
Accept-Language 请求头HTTP 请求头字符串zh-CN,zh;q=0.9,en-US;q=0.8随每个请求发送;服务器端指纹识别载体
来自 Intl API 的语言区域字符串"zh-CN"与语言数组交叉核对以检验一致性

语言指纹有多独特?

单独来看,语言偏好是指纹工具包中熵值较低的信号之一。 其威力来自组合和一致性校验。下表将其贡献置于更高熵信号的背景下进行对比:

信号近似熵值来源
User Agent 字符串10–15 位EFF Cover Your Tracks
Canvas 渲染8–12 位EFF / BrowserLeaks 研究
WebGL 渲染器6–10 位学术指纹识别研究
系统时区3–4 位EFF Panopticlick,2010 年
语言数组(单语用户)<1 位EFF / 404privacy.com 分析
语言数组(多语言,不寻常组合)3–6 位学术实地研究
完整指纹(30+ 信号组合)18+ 位(1/287,000)EFF Panopticlick 原始研究

EFF 2010 年的 Panopticlick 研究分析了超过 50 万个浏览器指纹, 发现 84% 的浏览器是完全唯一的。语言偏好是被测量的信号之一; 对于具有非英语或多语言配置的浏览器,其贡献显著增加。 值得注意的是,研究发现语言指纹识别存在不平等影响: 说少数语言的用户和多语言用户面临更高的唯一性率,因此比仅使用英语的用户面临更大的追踪风险。

现实中谁在使用语言指纹识别?

广告网络和跨站追踪器

广告技术平台在构建设备标识符时,将 navigator.languages 与数十个其他信号捆绑在一起。 语言数据作为一致性信号特别有价值——如果用户的 IP 地理位置显示在德国, 但语言数组是 ["zh-CN", "zh"],这种不一致暗示使用了 VPN 或代理, 这本身就会影响广告定向决策。 随着第三方 Cookie 在各浏览器中被弃用,基于指纹的标识符已逐渐填补同样的定向功能。

欺诈检测和机器人检测平台

Fingerprint.com 等服务将语言偏好纳入其 Smart Signals 系统,作为设备情报档案的一部分。 如果一次登录尝试来自语言数组与该账户档案中存储的不同的设备,就会触发风险信号。 浏览器自动化工具和无头浏览器通常报告不寻常或默认的语言值—— 完全通用配置中的 ["en-US"]——欺诈系统用这一点来标记机器人活动。

反机器人和反模拟系统

防御账号欺诈、票务倒卖和凭证填充的系统,会交叉核对多个位置信号:navigator.languagesAccept-Language HTTP 请求头、 IP 地理位置,以及 Intl API 报告的时区。 所有四个信号完全一致的指纹暗示是合法浏览器。 Selenium、Puppeteer 和指纹欺骗工具中常见的不匹配,是可靠的机器人信号。 ACM 发表的研究已记录了追踪者在生产环境中读取和比较这些值的行为。

付费墙和地区访问控制

媒体网站和流媒体服务将 IP 地区与 navigator.languages 结合使用, 以检测绕过地理限制的用户。 一个通过美国出口节点路由流量但浏览器报告 ["zh-CN", "zh"] 的用户, 是触发地理限制执行的明显不一致信号。

语言指纹识别合法吗?

在 GDPR 框架下,当语言偏好数据可以合理地与个人关联时, 它作为浏览器指纹的一部分被视为个人数据。 法国数据保护机构(CNIL)已明确要求对用于广告的浏览器指纹识别获得知情同意, 仅对欺诈预防和安全有狭窄的合法利益豁免。 在美国的 CCPA 和 CPRA 框架下,指纹数据——包括基于语言的标识符—— 被视为受退出权利约束的个人信息。各司法管辖区的执法仍不一致, 但监管机构对基于指纹的追踪的施压正在增加。

在中国,《个人信息保护法》(PIPL)于 2021 年生效, 将指纹识别等行为追踪技术纳入个人信息处理的规范范畴, 要求处理者具有合法依据并履行告知义务。

W3C 指纹识别指南 明确将 navigator.languages 标识为指纹攻击面, 并建议浏览器厂商限制其暴露。这一指导影响了 Safari、Brave 和 Firefox 隐私模式的行为。

如何防范语言指纹识别

与防范 Canvas 或 WebGL 等高熵信号相比,防范语言指纹识别更具可操作性—— 因为数据更易于标准化。以下方案按有效性从强到最适合日常使用排列:

  • Brave 浏览器(日常使用推荐):Brave 的 Shields 默认实现语言指纹识别防护。 在标准模式下,Brave 只报告最高优先级的语言偏好,而非完整数组。 在严格模式下,无论实际设置如何,它始终报告 "en-US", 将你置于尽可能大的匿名集合中。保护范围延伸至 Accept-Language 请求头,确保 HTTP 层和 JavaScript 层报告一致。
  • 启用 privacy.resistFingerprinting 的 Firefox:about:config 中启用此标志,会使 Firefox 无论配置的语言如何, 都只报告 ["en-US", "en"], 与 Tor Browser 基准一致,最大化匿名集合。
  • Tor Browser(最强防护):Tor Browser 为所有 Tor 用户报告统一的语言配置—— 使个人语言追踪在 Tor 网络内不可能实现。代价是浏览速度较慢和部分网站兼容性问题。
  • Safari(内置部分防护):iOS 和 macOS 上的 Safari 只报告用户的最高优先级语言偏好, 而不是完整数组,并限制哪些字体与语言报告一起暴露。 这不是完整的防护,但会有意义地减少追踪者可获得的信号。
  • 精简你的语言列表:如果你仅出于内容偏好将多种语言添加到浏览器设置中, 考虑删除较少使用的语言。像 ["zh-CN", "en-US", "ja"]这样的不寻常组合,比 ["zh-CN"] 更具显著区分度。 这是一个低门槛的改变,能有效减少语言熵。
  • 使用 VPN——但要了解其局限性:VPN 会改变你的 IP 地理位置, 这可能引入语言-位置不匹配,而这本身就成为一个信号。 VPN 不会改变 navigator.languages 报告的内容。 在 whatsmy.fyi 上检查你的 VPN 和语言信号是否一致。

常见问题

语言指纹识别在无痕或隐私模式下有效吗?

有效。隐私浏览模式阻止你的浏览器保存历史记录、Cookie 和表单数据—— 但不会改变你的语言设置。navigator.languages 在无痕窗口和普通窗口中返回相同的值。 Chrome 的无痕模式报告你实际配置的语言列表,不作任何改变。 只有具备主动指纹保护的浏览器——Brave、启用了 privacy.resistFingerprinting 的 Firefox 或 Tor Browser——行为才会不同。

navigator.language 和 navigator.languages 有什么区别?

navigator.language 返回一个字符串——你的最高优先级语言偏好。navigator.languages 返回所有已配置语言偏好的有序数组, 从最高优先级到最低优先级排列。navigator.languages 的第一个元素始终等于 navigator.language。 追踪者读取完整数组,因为它包含更多熵—— 配置了 ["ja-JP", "zh-CN", "ko"] 的用户, 比只报告 "zh-CN" 的用户更容易被识别。

VPN 能防止语言指纹识别吗?

不能。VPN 通过不同服务器路由你的流量以改变可见的 IP 地址, 但对 JavaScript 从浏览器语言设置读取的内容没有任何影响。navigator.languages 由浏览器和操作系统配置填充,而不是由网络路径决定。 事实上,VPN 可能使你的指纹一致性变差: 如果你的 IP 暗示一个国家但语言数组暗示另一个国家, 这种不匹配本身就是一个独特的追踪信号。

Accept-Language HTTP 请求头与 navigator.languages 相同吗?

它们共享相同的源数据。Accept-Language 请求头由你的语言偏好构建, 在任何 JavaScript 运行之前随每个 HTTP 请求发送—— 这意味着服务器端指纹系统无需执行任何脚本就可以读取它。navigator.languages 通过 JavaScript 暴露相同的偏好。 追踪者会交叉核对两者以检测可能表明欺骗的不一致性。 Brave 的语言指纹保护同时涵盖 HTTP 请求头和 JavaScript API,以保持一致性。

语言指纹识别对说少数语言的用户影响更大吗?

是的。EFF 的 Panopticlick 研究发现,非英语用户和多语言用户的浏览器指纹唯一性率更高—— 因此比只使用英语的用户面临更大的追踪风险。 语言数组中包含低频语言标签或不寻常语言组合的用户, 比只报告 ["en-US"] 的用户更容易被识别。 这种不平等影响是隐私倡导者认为指纹识别应该需要明确同意, 而非依赖合法利益豁免的原因之一。

Brave 的语言指纹保护在技术上如何工作?

Brave 的 Shields 在浏览器引擎层面拦截对 navigator.languagesAccept-Language HTTP 请求头的调用。 在标准 Shields 模式下,Brave 只返回最高优先级语言偏好,从数组中删除次要语言。 在严格模式下,它始终返回 ["en-US"] 并设置相应的 HTTP 请求头, 将用户置于与大多数互联网用户相同的匿名集合中。 这是按网站和按会话应用的,与 Brave 更广泛的 Farbling 指纹随机化方式一致。

语言指纹识别如何与其他追踪信号结合?

语言在多信号指纹中最为有效。Fingerprint.com 等商业指纹平台将语言与 Canvas 输出、WebGL 渲染器、屏幕分辨率、 硬件并发数、已安装字体、时区及 20 多个其他信号组合使用。 语言既贡献其自身的熵,又充当对其他位置相关信号的一致性校验。 组合 30+ 个信号的完整指纹至少达到 18 位熵——意味着只有 1/287,000 的浏览器共享相同档案—— 语言作为将档案连接在一起的一致性验证器之一。 参见 Canvas 指纹识别 音频指纹识别 了解语言验证器所强化的高熵信号。

相关文章

即时查询您的 IP 地址、位置与隐私评分。

零日志。零追踪。零外部 API。

立即检测 →

相关文章

什么是浏览器语言指纹识别? | whatsmy.fyi