什么是触摸指纹识别?
浏览器与设备

什么是触摸指纹识别?

触摸指纹通过maxTouchPoints等属性区分桌面设备、触摸屏设备和移动设备,是浏览器指纹的硬件维度之一。

7 分钟阅读·

触摸指纹是一种浏览器追踪技术,读取 navigator.maxTouchPoints 和触摸事件API来确定你是在智能手机、平板电脑、支持触摸的笔记本还是传统桌面上——静默地、无需Cookie,一行JavaScript就能完成。你现在就可以在 whatsmy.fyi 上查看你自己的设备暴露了什么。

简短总结

触摸指纹使用 navigator.maxTouchPointsTouchEvent 构造函数和 pointer CSS媒体查询来对你的设备类型进行分类。没有触摸屏的桌面返回 maxTouchPoints = 0;iPhone返回 5;Surface Pro返回 10。结合屏幕尺寸和像素比率,这个信号能可靠地区分移动和桌面流量,并为完整的浏览器指纹贡献可测量的熵。

什么是触摸指纹?

触摸指纹是 浏览器指纹 的一个子集,针对你设备的触摸硬件。每个浏览器都暴露一组JavaScript API,描述设备是否有触摸屏,以及如果有,它支持多少个同时触摸点。这些API被设计用来帮助开发者构建自适应界面——但它们同时也是一个不需要同意、不需要存储、不需要用户交互的设备类型分类信号。

主要属性是 navigator.maxTouchPoints,这是W3C指针事件规范中引入的只读整数。它返回设备可以同时追踪的最大触摸接触数。零意味着没有触摸屏。五或十表示智能手机或平板电脑。支持触摸的笔记本和二合一设备通常报告10。由于这个值反映了物理硬件,它在会话间稳定,对清除浏览数据有抵抗力,在无痕模式下也相同。

触摸指纹本身不能唯一识别你——它是分类信号,而非唯一标识符。它对追踪者的价值在于将其与屏幕分辨率、设备像素比率、用户代理和电池状态结合,构建更完整的设备档案。 电子前哨基金会的Cover Your Tracks 项目将触摸支持确定为完整浏览器指纹测试中收集的信号之一。

触摸指纹是如何工作的?

指纹脚本读取三个互补信号来构建设备类型图像。每个都可以在不到一毫秒内读取,无需任何用户权限。

信号1——navigator.maxTouchPoints

这是最直接的信号。根据 W3C指针事件规范,该值必须反映硬件最大值——它不能通过软件设置或清除浏览数据来更改。具有10点多点触控数字化仪的设备始终返回 10。这种硬件绑定使信号对指纹识别有用:它是跨会话一致的,不受针对Cookie或存储的隐私工具影响。

信号2——TouchEvent构造函数检查

较旧的指纹代码检查全局范围内 TouchEvent 构造函数是否存在。在非触摸设备上,这个构造函数不存在,产生 undefined。在iOS和Android上它存在。这种方法早于指针事件API,现在可靠性较低——基于Chromium的浏览器即使在非触摸桌面上也暴露构造函数——但它仍然包含在许多遗留指纹库中。

信号3——通过JavaScript的CSS指针媒体查询

可通过 window.matchMedia 从JavaScript读取的 pointer CSS媒体功能,区分粗糙指针(触摸屏上的手指)、精细指针(鼠标或触控笔)和完全没有指针。与 maxTouchPoints 不同,此查询反映的是主要输入设备,而非触摸硬件的存在,因此使用键盘鼠标的Surface Pro即使其 maxTouchPoints10,也会报告 fine。同时读取两个值提供更完整的输入档案。

// 触摸指纹: 读取所有三个信号
function getTouchFingerprint() {
  // 信号1: 最大同时触摸点数(硬件常量)
  const maxTouchPoints = navigator.maxTouchPoints ?? 0;

  // 信号2: 遗留TouchEvent构造函数存在检查
  const hasTouchEvents = 'TouchEvent' in window;

  // 信号3: 通过matchMedia的CSS指针媒体查询
  const pointerType = window.matchMedia('(pointer: coarse)').matches
    ? 'coarse'        // 手指 / 触摸屏
    : window.matchMedia('(pointer: fine)').matches
    ? 'fine'          // 鼠标 / 触控笔
    : 'none';         // 无指针设备

  // 基于组合信号的设备分类
  const isTouch = maxTouchPoints > 0;
  const isMobile = isTouch && window.screen.width <= 768;
  const isTablet = isTouch && window.screen.width > 768 && window.screen.width <= 1366;

  return {
    maxTouchPoints,   // 0=桌面, 5=智能手机, 10=平板/二合一
    hasTouchEvents,
    pointerType,
    isTouch,
    isMobile,
    isTablet,
  };
}

// 示例输出:
// MacBook Pro(无触摸屏)→ { maxTouchPoints: 0, pointerType: "fine", isTouch: false }
// iPhone 15 Pro → { maxTouchPoints: 5, pointerType: "coarse", isMobile: true }
// Surface Pro 11 → { maxTouchPoints: 10, pointerType: "fine", isTablet: true }
// iPad Air → { maxTouchPoints: 5, pointerType: "coarse", isTablet: true }

各设备类型的maxTouchPoints值

下表显示了常见设备 navigator.maxTouchPoints 返回的值,以及它们的触摸事件和指针查询结果。这些值反映了硬件常量,在浏览器版本或操作系统更新中不会改变。

设备类型maxTouchPointspointer媒体查询window中TouchEvent
台式PC / Mac(无触摸屏)0finefalse (Gecko) / true (Chromium)
iPhone(所有现代型号)5coarsetrue
Android智能手机5或10coarsetrue
iPad / Android平板5或10coarsetrue
Microsoft Surface / 触摸笔记本10fine(使用鼠标时)true (Chromium)
Chromebook(非触摸)0finefalse
Linux桌面(任何浏览器)0finefalse (Firefox) / true (Chrome)

window中TouchEvent 列的不一致对隐私很重要:基于Chromium的浏览器在所有平台上(包括非触摸桌面)都暴露 TouchEvent 构造函数,以避免破坏Web兼容性假设。Firefox只在实际触摸设备上暴露它。这种不对称本身就是一个浏览器引擎标识符——一个从尝试读取另一个而派生的独立指纹信号。

现实中谁在使用触摸指纹?

广告网络和分析

广告技术平台读取 maxTouchPoints 按设备类型细分受众,用于竞价定价和广告创意选择。移动和平板库存与桌面相比有不同的CPM价格。由于这个信号不需要Cookie,也不需要用户交互,它直接进入基于指纹的受众档案的设备类型维度。允许开发者构建响应式菜单的相同信号被重新用于在你不知情的情况下将你的设备分配到定价桶中。

欺诈检测和机器人缓解

Fingerprint.com和DataDome等安全平台将触摸信号作为一致性检查使用。声称在其用户代理中是移动浏览器但报告 maxTouchPoints = 0 的机器人是揭示自动化的矛盾。即使用户代理被欺骗为智能手机,无头Chrome、Puppeteer和Selenium通常也返回非触摸值。触摸信号不一致是在计算昂贵的检查之前运行的轻量级机器人检测启发式之一。

付费墙和地理限制执行

一些出版商向移动用户和桌面用户提供不同的内容版本——不仅仅是为了布局,还为了计量访问逻辑。清除Cookie并重新加载的用户可能会失去其会话,但其设备的 maxTouchPoints 值保持不变。结合屏幕分辨率和时区,触摸数据帮助重新识别已删除Cookie的回访者。

A/B测试和个性化引擎

实验平台使用设备类型——部分来自触摸信号——来细分实验变体。在没有Cookie的情况下对"仅移动用户"运行测试需要可靠的设备类型信号。maxTouchPoints 提供了一个无法清除的硬件基础值,使其在整个会话中比用户代理字符串解析更稳定。

触摸指纹是隐私风险吗?

触摸指纹比 Canvas指纹 音频指纹 的直接隐私风险更小,因为它产生低熵分类数据,而非唯一标识符。maxTouchPoints 的值为 5 是每台iPhone共享的。当触摸数据与其他信号结合时风险才会显现:屏幕分辨率、设备像素比率、硬件并发性、时区和 WebGL渲染器 信息。在组合指纹中,触摸数据有助于缩小匿名集——它将共享你档案的设备数量从数亿减少到数千万,使后续的高熵信号在个人识别方面更有效。

根据GDPR,设备指纹识别——包括触摸数据等低熵信号——当生成的档案可以与个人关联时,被视为个人数据处理。法国CNIL和爱尔兰DPC都发布了将指纹识别视为等同于基于Cookie的追踪的同意指南。实际上,针对触摸信号收集的执法很少见,因为这些数据在响应式设计检测中有合法用途。

如何保护自己免受触摸指纹追踪

保护选项从被动降低到主动欺骗不等。最有效的防御针对完整的指纹识别面,而非单独的触摸信号。

  • Brave Browser(推荐日常使用):Brave的Farbling功能按会话和网站随机化一系列指纹信号。虽然Brave目前不直接随机化 maxTouchPoints,但其更广泛的指纹随机化使组合指纹更不稳定,对跨站追踪更不有用。对大多数用户来说,Brave是保护和可用性之间的最佳平衡。
  • Firefox配合 privacy.resistFingerprinting启用此标志后,Firefox无论你的硬件如何都报告 maxTouchPoints = 0 并抑制触摸事件API。这使你的浏览器普遍报告为非触摸桌面设备,以在实际触摸屏设备上使用时破坏触摸依赖网站为代价消除触摸指纹。
  • Tor Browser(最强保护):Tor Browser继承了Firefox的 privacy.resistFingerprinting 并标准化完整的指纹识别面,包括触摸数据。所有Tor Browser用户看起来具有相同的触摸档案。代价是由于Tor网络路由导致浏览速度明显较慢。
  • 使用具有常见硬件的设备:maxTouchPoints 的匿名集由多少其他设备共享你的确切值来决定。如果你使用iPhone,你与数亿其他iPhone共享一个值。不寻常的硬件——具有非标准数字化仪的自定义二合一设备——产生更罕见的值。标准、流行的硬件减少了触摸相关的熵。
  • VPN在这里没有帮助:VPN通过不同的IP地址路由你的流量,但不修改浏览器API响应。无论VPN是否活跃,你的 navigator.maxTouchPoints 值都是相同的。在 whatsmy.fyi 上查看你的完整浏览器指纹暴露情况——包括你的网络信息。

常见问题

navigator.maxTouchPoints在桌面上返回什么?

在没有触摸屏的标准台式机或笔记本上,navigator.maxTouchPoints 返回 0。这个值是一个硬件常量——它反映了设备中没有触摸数字化仪。清除浏览器历史记录、使用无痕模式或切换网络都不会改变这个值。

maxTouchPoints在所有浏览器中工作方式相同吗?

该属性本身行为一致——它在所有现代浏览器中返回一个硬件派生的整数。然而,TouchEvent 构造函数的可用性不同:基于Chromium的浏览器因Web兼容性原因在非触摸桌面上暴露它,而Firefox只在实际触摸设备上暴露它。这种差异本身就是一个可以独立于用户代理字符串识别浏览器引擎的指纹信号。

触摸指纹能单独识别我吗?

不能单独识别。maxTouchPoints 是一个分类信号——大多数设备落入少数几个值之一(0、5或10)。数百万设备共享每个值。触摸指纹在与其他信号结合时成为隐私风险,如屏幕分辨率、设备像素比率、 WebGL渲染器数据 音频指纹。在完整的组合指纹中,触摸数据缩小了匿名集,但单独不足以进行个人识别。

无痕模式能隐藏我的触摸指纹吗?

不能。无痕和隐私浏览模式防止浏览器将浏览历史、Cookie和表单数据保存到磁盘。它们不修改面向硬件的API返回的值。你的 navigator.maxTouchPoints 值、屏幕尺寸和指针类型在无痕窗口和正常浏览会话中是相同的。

为什么我的触摸笔记本报告的值与手机不同?

支持触摸的笔记本和二合一设备通常有10点数字化仪,因此报告 maxTouchPoints = 10。大多数智能手机报告 5,反映了5点数字化仪。iPad也报告 5。确切值取决于触摸控制器的硬件规格,而非操作系统。此外,使用鼠标的触摸笔记本即使其 maxTouchPoints 不为零,在CSS媒体查询中也会报告 pointer: fine——两个信号捕获了输入配置的不同方面。

触摸指纹与用户代理检测有何不同?

用户代理字符串很容易被欺骗——任何脚本、扩展或开发者工具都可以设置任意用户代理。navigator.maxTouchPoints 读取无法通过用户代理覆盖更改的硬件寄存器。因此,在其用户代理中声称是iPhone但返回 maxTouchPoints = 0 的机器人可以被检测为欺诈。触摸信号与声称的用户代理不一致是欺诈预防平台使用的常见机器人检测启发式。

连接外部显示器会改变navigator.maxTouchPoints吗?

不会。连接外部显示器改变你的屏幕分辨率和可用显示区域,但不影响 maxTouchPoints。该值反映主要设备的触摸硬件——你的笔记本或平板——而非连接的显示器。然而,将支持触摸的外部显示器连接到设备,如果操作系统注册了额外的触摸数字化仪,可能会更新该值,尽管这在实践中不常见。

相关文章

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

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

立即检测 →

相关文章

什么是触摸指纹识别? | whatsmy.fyi