← 返回博客

字体指纹是什么?网站如何通过字体列表识别浏览器环境

换一批环境、换一批代理,页面排版还是有细微差别——同一个网站,这台环境上的按钮文字比那台宽两个像素。排版差异的来源之一是字体:每台机器装了什么字体,网页一测就知道个大概,字体列表由此成为浏览器指纹的一类参数。本文讲三件事:网站怎么测字体、检测结果能信到什么程度、字体列表三档(真实/随机/自定义)分别适合什么情况。字体在整体指纹里的位置,MostMate 的指纹设置把它列为基础参数之一,产品全貌见MostMate 是什么。

什么是字体指纹:网站在猜你装了哪些字体

字体指纹不是把你的字体文件打包上传,而是网站用一组测试推断「本机能不能显示某个字体」。操作系统出厂自带一批字体,用户和软件再往里加:装 Office 会多出一批,中文版 Windows 还自带宋体和微软雅黑。两台机器的字体集合大概率不同,这份差异就是信息。EFF 在 2010 年的追踪研究中就把字体列入可识别参数,此后这类检测一直存在于主流网站里。

它和其他指纹参数的区别在于变化频率:Canvas、WebGL 由硬件和渲染引擎决定,通常几个月才动一次;字体列表跟着软件安装走,装个新办公软件、删个字体文件,列表就变。变化快的参数,露馅也快——一次软件安装就能让列表偏离原本的样子。

网站怎么测字体:三种方法,测的都是「有没有」

网站无法直接读取系统字体清单,只能间接推断,常见方法有三种:

  1. 宽度差分法。页面里放一段固定文字,先用替补字体(如 monospace)量一次宽度,再指定目标字体量一次。两次宽度相同,说明目标字体不存在;宽度不同,说明它存在。检测脚本把上百个常见字体名轮一遍,就能拼出一份「存在/缺失」名单。
  2. Canvas 渲染对比。用 Canvas 把同一段文字用不同字体画出来比较像素差异,顺带把渲染引擎的差异也带了出来。
  3. Font Loading API。现代浏览器提供 document.fonts.check('12px "Segoe UI"') 这样的接口,直接返回某个字体是否可用,比量宽度省事。
浏览器字体指纹的三种检测方法

三种方法测的都是「这个字体名在本机能不能用」,测不到字体文件本身;实际检测常混用,宽度差分做主力、Canvas 做交叉验证。接口细节见 MDN 的 Document.fonts 文档,完整测试字体名单与判定逻辑可看 FingerprintJS 的字体检测源码。

检测结果先天残缺:你拿到的不是完整清单

这一节先纠正一个常见理解偏差。网站测不到你装的全部字体,只能测它名单里的那部分——检测结果实际是「常见字体名单 ∩ 你的本机」的交集。

后果有两个。其一:两台字体集合不同的机器,可能得到相同结果——甲机器装了字体 A 和 B,乙机器装了 A 和 C,检测站只测 A 和 D,两台都报「A 有、D 没有」,哈希值一样。字体指纹相同不能反推设备相同,它只证明在测试名单范围内表现一致。

其二:名单之外的部分完全隐身。一台装了 300 个字体的设计工作站和一台裸装系统,若测试名单只覆盖 150 个常见字体,多出来的 150 个不会被看到。

对多账号运营来说,残缺的检测结果是双向的:单凭字体定不了身份,可风控会把字体和别的信号交叉验证,列表一旦和操作系统、语言设置对不上,就成了显眼的异常。检测工具展示的字体数和哈希值,按「同环境稳定、跨环境不同」来读即可,不必追求某个具体数值。

哪些因素在塑造你的字体列表

字体集合由四层东西叠加而成,每层都可能让两台「看起来一样」的机器露出差异:

  • 操作系统与版本。Windows、macOS、Linux 出厂字体集不同;同为 Windows,10 和 11 也有出入。这是字体列表与 UA 声明的平台能互相印证的基础。
  • 系统语言与地区。中文版 Windows 自带宋体、微软雅黑,多数欧美机器上没有;日文、韩文系统同理。字体列表常常先一步暴露环境的真实地区背景。
  • 应用软件捆绑。Office、Adobe、WPS 都会往系统里塞自家字体,做设计的机器和只跑浏览器的机器,字体集合差距很大。
  • 浏览器引擎的替补规则。同一个字体名,Chromium 和 Firefox 的 fallback 选择不同,量出来的宽度也不同;环境内核版本变了,细节结果可能跟着变。
影响浏览器字体列表的四层因素

四层叠加解释了一个常见现象:IP、时区、语言都换到位的环境,字体列表还带着「老家」痕迹——声称英语美国环境,字体里却躺着微软雅黑。交叉验证时,这类错位比单一参数异常更说明问题。

一致性怎么判断:三条标准与三步自测

放在环境管理里,字体参数要过三条标准:

  1. 单环境稳定。同一环境反复检测,字体数和哈希值保持不变——环境使用期间别随手装软件、删字体。
  2. 环境间互异。声称来自不同地区的环境,字体列表应有可见差别;「美国人」和「德国人」两个环境报出完全相同的字体哈希,属于可疑信号。
  3. 与声明信息对得上。Windows 环境出现 macOS 独有字体、英语环境带一整排中文字体,都是显眼的错位。随机化参数的风险在为什么指纹随机化反而危险那篇有专门讨论,字体是这个逻辑里最典型的一项——随机拼出来的字体组合在真实世界里几乎不存在。

三步自测:在 BrowserScan 或 Iphey 打开检测结果页,找到字体(Fonts)一项记下数值;同环境刷新两三次确认稳定;开第二个环境跑同样检测,对比差异是否符合各自的人设。

BrowserScan检测结果页的字体

MostMate 字体列表三档怎么选

MostMate 的指纹设置里,字体列表提供真实、随机、自定义三档,对应三种使用状态:

  • 真实:环境直接使用宿主机当前字体列表,检测结果与手动打开浏览器一致。适合宿主机配置干净、人设与宿主系统地区一致的场合,比如本机是英文版 Windows、做的正是美国环境。
  • 随机:由环境生成一份字体组合,前提是随机算法按操作系统和语言的范围来拼,集合在该人设的合理范围内。适合批量建环境、不必逐一核对字体细节的日常铺量。
  • 自定义:手动勾选字体列表,适合目标平台风控严格、或人设与宿主机差异较大的环境,按人设补齐对应系统的字体集,配置时对照上一节三条标准逐项核对。

三档入口都在环境创建表单的指纹设置区,配置后在指纹预览面板的「字体列表」字段确认当前值,再用检测站复测一次。完整配置流程见MostMate 新手怎么开始。

结语

字体指纹的本质,是网站用有限测试名单推断本机字体集合:测不到完整清单,却足以在交叉验证时暴露错位。管理上抓三件事——单环境稳定、环境之间拉开差异、字体列表与声称的系统地区对得上。想从零跑通一套环境,可先下载 MostMate;指纹各项的一致性逻辑,多数在MostMate 四大设计原则那篇能找到对应说明。

FAQ

字体指纹能单独识别一台设备吗?

不能。检测结果受测试名单限制,两台字体不同的机器可能得到相同结果。风控通常把字体与 UA、Canvas、语言等参数放在一起交叉验证,字体单独不构成身份依据。

不同浏览器的字体指纹会一样吗?

字体集合相同时大方向一致,但不同引擎的替补规则和渲染细节不同,宽度数值会有差别。同一台机器上 Chrome 和 Firefox 的检测结果常有细节差异,这是引擎差异。

装的字体越多越容易被识别吗?

多出来的字体只有落入检测名单才被看到。数量本身影响有限,稀有字体是例外——小众设计字体一旦被测到,会让这份列表在统计上显得少见。

清除 Cookie 能清掉字体指纹吗?

不能。字体列表来自本机安装情况,不属于站点存储数据,清 Cookie、清缓存对它没有影响;要改变它,需在环境层面更换字体配置。

MOSTMATE

让多账号安全管理更简单

从第一个账号开始,用 MostMate 建立更安全、更智能、更高效的多账号运营方式。

  • 环境彼此独立,身份逻辑一致。
  • AI 自动化 · 账号健康 · 团队运营
下载 MostMate