很多人忽略的细节,我把“反差大赛”的链路追完了:你点一下,它能记住你的设备指纹

前言 最近一个看起来很无害的“反差大赛”页面在社交平台上被大量转发。我随手点进去把整个跳转链路追了一遍,结果发现:一次点击就能让后台识别并持久化你的“设备指纹”。下面把过程、原理、如何验证以及可行的防护措施都讲清楚,便于读者自己检验和应对。
我怎么追踪的(简要流程)
- 在桌面 Chrome 打开 DevTools(Network / Application),同时启动 mitmproxy 做请求抓包。
- 点击活动页的短链接,记录每一次重定向与第三方域名请求。
- 在 Network 面板筛查加载的脚本,定位可疑脚本(通常来自 tracker、cdn 或 analytics 域名)。
- 在 Application 面板查看 Cookies、localStorage、IndexedDB、ETag、Service Worker 等持久化存储。
- 通过断点/格式化脚本,查找采集浏览器指纹的函数调用(如 canvas、audio、WebGL、enumerateDevices、navigator.userAgent、clientHints 等)。
我发现了什么(关键点)
- 第一次点击会经过多次 302/307 跳转,最后加载一个第三方脚本(形式上像 analytics/fp 库)。
- 该脚本会收集大量信息:userAgent、屏幕分辨率、设备像素比、时区、语言、字体枚举、Canvas 与 WebGL 指纹、AudioContext 特征、硬件并行度、mediaDevices 列表、部分 client hints(如果浏览器支持)。
- 收集到的数据被哈希后向服务器发起一次 POST,请求返回一个唯一 ID(例如 device_id=abcd1234),随后把这个 ID 写入 localStorage、IndexedDB、Cookie(有时还会利用 ETag 或缓存策略做“隐形持久化”)。
- 以后的访问中,只要浏览器带上 cookie/localStorage/IndexedDB 或者同样的指纹特征,服务器就能把请求和之前的 ID 关联起来,形成“记住你”的效果。
- 即便清除 Cookie,指纹仍可能通过 IndexedDB、ETag 回写、或再次计算后与服务器记录匹配,实现“恢复绑定”。
为什么能持久化(技术解释)
- 指纹不是单一项(比如 userAgent),而是多维特征的组合。即便某一项被修改,其他项仍能提供较高辨识度。
- 浏览器存储手段很多:localStorage、sessionStorage、IndexedDB、Cache Storage、service worker 再加上服务器利用资源缓存(ETag)或 CNAME/第三方域名绕过第三方 cookie 限制,都会让“清除 cookie”无法完全去除痕迹。
- 一些成熟的指纹库(如 FingerprintJS 系列,市面上有多种商业/开源实现)专门优化碰撞率和稳定性,能在多次访问间保持高识别率。
如何亲自验证(一步步)
- 在浏览器打开 DevTools → Network,点击活动页面短链,观察网络请求,尤其是发向陌生域名的 POST 请求。
- DevTools → Application,检查 localStorage、IndexedDB、Cookies、Cache Storage:是否有新增键名或 ID。
- 清理 Cookie 后再重复点击,观察是否能“恢复”同一个 ID(Network 请求中返回的 ID 或请求参数)。
- 如果用 mitmproxy,可以查看请求体中是否包含大量指纹字段(canvas、fonts、timezone 等)。
简单的指纹检测脚本(供测试) // 此为示例思路:取若干字段拼接后哈希 (function(){ const data = [ navigator.userAgent, screen.width+'x'+screen.height, navigator.language, navigator.hardwareConcurrency, navigator.deviceMemory || '', ].join('||'); console.log('fingerprint_sample:', btoa(unescape(encodeURIComponent(data)))); })();
(真实指纹库更复杂,会采集 canvas/webgl 等不可见特征并做哈希)
用户能做什么(可操作的防护)
- 使用带抗指纹功能的浏览器:Tor Browser、Firefox(开启 resistFingerprinting),或 Brave 的隐私设置。
- 安装并启用脚本/资源拦截器:uBlock Origin(严格模式)、Privacy Badger、NoScript 等,阻止未知第三方脚本加载。
- 阻止第三方 Cookie 与跨站点跟踪(浏览器设置中关闭第三方 cookie)。
- 对可疑短链接使用独立的沙盒或一次性浏览器个人资料(例如在 Guest 窗口或新的临时浏览器中打开)。
- 定期清理除了 Cookie 之外的存储:localStorage、IndexedDB、Cache。(不过单纯清理也可能被重建)
- 在移动端使用具备防指纹或广告/追踪拦截功能的浏览器(如 Firefox for Android +增强隐私配置,或 Brave)。
对站长/活动发起方的建议
- 若真的需要统计,请优先使用尊重隐私的方案:基于聚合的匿名统计、并在醒目位置说明收集目的与保存时长,提供用户选择退出的方式。
- 避免在营销活动中嵌入外部不可控脚本,或至少评估第三方供应商是否有透明的隐私政策和数据保留规则。
- 如果使用设备指纹用于反作弊/风控,应考虑数据最小化与过期策略,给用户合理解释。
结语 一次轻点就能把设备“记住”并不是什么科幻:指纹技术已经很成熟,很多网站在不显眼的位置就部署了这些机制。对普通用户而言,加强浏览器隐私设置、慎点未知短链、使用脚本拦截是最直接的防护;对站方而言,透明与合规会带来长期信任。需要的话,我可以把抓包日志和关键请求样本整理出来,帮助你进一步分析具体域名和脚本。