越想越生气,我把“每日大赛黑料”的链路追完了:你点一下,它能记住你的设备指纹

前言 那天晚上随手点了一个“每日大赛黑料”的链接,没想到点一下就像放了根钩子。三天追查下来,发现的不只是广告重定向那么简单——从入口到落地页的每一步,都在默默拼凑你的“设备画像”。把链路梳理清楚后我很生气:这个流程做得既隐蔽又高效,普通用户根本难以察觉。
我怎么追的
- 在桌面浏览器打开目标链接,开启开发者工具的 Network、Console、Application 面板,记录所有请求、响应头、存储项和脚本加载。
- 用代理(Charles/Fiddler)抓包,查看域名跳转、请求参数和返回内容。
- 在不同设备/不同浏览器重复点击,观察哪些识别信息一致、哪些不同。
- 用隐私插件(uBlock Origin、Privacy Badger)对比启用前后的差异,验证哪些脚本和请求负责采集数据。
链路还原(关键环节) 1) 入口页面(诱饵) 你看到一个标题或按钮,实际链接先指向一个短链/跳转器(tracking.example/abcd)。短链的作用是记录点击时间、来源页、referer,然后重定向。
2) 重定向器 -> 第三方域名 短链跳向一个或多个第三方域名,通常是广告平台、流量聚合器或专门的指纹跟踪域。这个阶段会携带一串参数:campaign id、source、媒体位、短链 id,以及浏览器基本信息(User-Agent、Accept-Language)。
3) 注入指纹采集脚本 在跳转过程中,页面会加载一个外部脚本(名字像 fingerprint.min.js、tracker.js、fp.js),这个脚本开始主动探测浏览器和设备的各种属性并把结果发回追踪服务器。
4) 指纹生成与ID下发 服务器接收到采集的数据后,会用哈希算法(通常合并 canvas 指纹、字体信息、WebGL、音频指纹、时间偏差等)生成一个设备指纹ID,随后通过 Set-Cookie、localStorage、IndexedDB 或者更隐蔽的“evercookie”技术把这个ID写到你的设备上。
5) 持久化+跨域关联 指纹被存储后,广告平台和流量网络能在你访问其它站点时再次识别到相同ID,从而完成跨域追踪。若你之前在某个平台登录过(比如社交账号、支付),该ID还能被映射到真实用户,从“匿名设备”升级为“可识别个体”。
到底收集了哪些信息
- 浏览器指纹类:User-Agent、屏幕分辨率、时区、语言、平台、首选语言列表
- Canvas/WebGL 绘制差异(Canvas fingerprint)
- 字体枚举与字体度量(通过CSS + JS检测系统字体)
- 媒体与音频指纹(Web Audio API 输出)
- 可用插件/扩展、mimeTypes(现代浏览器限制后量能减弱)
- 硬件类:设备内存、CPU 核心数、触摸支持、GPU 信息
- 传感器与性能差异(比如动画帧率、子像素渲染差异)
- 存储能力与已存在的持久标识:Cookie、localStorage、IndexedDB、serviceWorker、ETag、缓存项
怎么把“点一下”变成长期可识别的原因 1) 多信号合并:单一属性容易变,但把几十上百个微差异合并成哈希后,稳定性很高; 2) 持久化策略丰富:仅靠Cookie可能被清,但同一个ID能同时写到多处(localStorage、IndexedDB、cache、ETag等),删除一处很难完全清除; 3) 跨域同步:广告生态里,域与域之间通过共享像素、第三方脚本、服务器端匹配把ID在不同域名间同步; 4) 登录/行为关联:一旦你在某服务登录,设备ID就有机会与账号做一次“对接”,未来即便换浏览器也能通过模型匹配恢复识别。
我发现的具体证据(示例化说明)
- 请求里能看到 fingerprint.js POST 到 tracker.adnet.com/collect,body 带有 canvasHash、fontsHash、tz、ua、screen 等字段;
- 响应头带 Set-Cookie: fpid=XYZ; Max-Age=31536000,同时 IndexedDB 里也有同样的 fpid 条目;
- 随后在你访问的推荐页里,带有 ?sid=XYZ 的请求被再次触发,说明该ID在不同域间被传递和使用。
普通用户能做什么(可执行的防护措施)
- 安装并启用 uBlock Origin、NoScript/ScriptSafe:拦截第三方脚本是最直接有效的办法,但代价是很多功能可能无法使用;
- 使用隐私导向浏览器(Brave、Firefox + 隐私扩展、Tor Browser):这些浏览器对指纹抗性更强或者有指纹随机化功能;
- 定期清理站点数据和浏览器存储:但要注意,单纯清 Cookie 并不能完全清除所有持久标识;
- 在必要时禁用 JavaScript:极端但有效;页面功能受限的同时指纹采集也会大幅受阻;
- 使用容器/独立浏览器配置:把容易暴露的行为分隔到不同环境,降低跨站关联概率;
- 使用 VPN 并不能阻止指纹,但能隐藏真实 IP,有助于削弱部分跨域拼图。
对平台/监管的建议(我更希望看到的)
- 对用户明确告知并征得同意:如果是采集指纹并长期跟踪,用户有权知道并选择;
- 限制无偿持久化:不要在用户不知情的情况下把唯一标识写到设备多个存储区;
- 提供删除与解绑通道:用户应能一键删除与账户相关联的设备指纹并阻止后续追踪。
结语(我的立场) 这套链路做得专业、隐蔽并且高效,把“点一下”变成了长期资产。对于普通用户来说,最现实的防护是提高警觉、用一些工具做第一道防线、并在必要时关闭脚本或换到更讲隐私的浏览器。作为内容创作者和读者,都应该有更多关于这些技术的透明度——这样才能在享受互联网便利的保留一些属于自己的隐私空间。
如果你想,我可以把我抓包时的关键请求/响应样本整理成一份技术清单,供大家一步步复现和验证。还可以写一份适合普通读者的一键防护指南,教人快速设置浏览器隐私保护。要哪种,跟我说。