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

前言 我点了一个看起来无害的“参加每日大赛”的按钮,随后把浏览器的开发者工具打开,从前端到后端把整个链路追了一遍。结论很直接:一次点击足够触发一套组合式识别手段,能把你的设备“标记”下来,并在后续访问中认出你。下面把我发现的细节、复现方法和可行的对策整理出来,供普通用户和关注隐私的朋友参考。
一、链路概览(发生了什么)
- 点击触发前端脚本收集环境信息(浏览器、屏幕、语言、时区等),并向后端请求一个临时token。
- 后端返回一个标识符(通常是UUID或hash),同时设置或更新若干持久化存储:cookie、localStorage/IndexedDB、service worker缓存、以及可能的图像缓存(ETag)和HTTP缓存头。
- 进一步的指纹收集通过canvas、WebGL、audioContext等API进行,得到一个更高熵的指纹值,后端将其与标识符绑在一起。
- 后续访问时,后端能够基于cookie/localStorage/service worker/缓存的组合,迅速把你对应回之前生成的标识符,即便你删除了某些单一存储也可能被其他机制“复原”。
二、我跟踪时用到的调查步骤(可复现的方法) 说明:下面的方法用于检验自己在设备上发生了什么。请勿用这些技术侵入、攻击或未经许可地测试他人系统。
- 打开浏览器开发者工具(Network/Storage/Console)。
- 在Network里监控所有请求,尤其关注触发点击后发出的POST/GET,以及响应中Set-Cookie、Cache-Control、ETag等头。
- 在Application/Storage查看:
- Cookie是否有新条目或已更新的值;
- localStorage和sessionStorage里是否出现了新键;
- IndexedDB中是否写入了对象;
- Service Worker是否被注册或更新,Cache Storage中是否存入了新的资源。
- 在Console里观察是否有canvas、WebGL或Audio相关的脚本被调用(常见指纹库会尝试读取canvas.toDataURL、WebGL渲染结果或audio分析)。
- 通过清理单项存储(先清除cookie再访问,再清除localStorage再访问)来检测是否存在“冗余”恢复机制(比如service worker或ETag使删除cookie后仍能识别)。
- 可在隐身模式、不同浏览器或启用/禁用JavaScript时重复测试,比较识别率差异。
三、常见的识别(指纹与持久化)手段与表现
- 基本浏览器指纹:navigator.userAgent、屏幕分辨率、时区、语言、字体可见性等。稳定但熵有限。
- 高熵指纹:canvas指纹、WebGL渲染差异、audioContext特征、字体测量、硬件并发/内存参数等,能显著提升唯一性。
- 本地持久化:
- Cookie:最常见的标识,但第三方/同域策略可能受限制。
- localStorage/IndexedDB:容量大、长期存在,脚本可读写。
- Service Worker + Cache Storage:能在请求层面拦截/注入,且不被普通“清除cookie”动作影响。
- ETag/HTTP缓存:利用缓存头和资源etag实现“evercookie”式恢复。
- Push订阅/Notification:虽然不常用于单纯识别,但绑定后能作为长期标识。
- 组合恢复:即便删除某一类存储,另一些仍能用来重新建立相同标识符,形成“弹性持久化”。
四、为什么单次点击就能留下“指纹”
- 触发点小,但脚本权限大:一个按钮点击通常会触发加载一段JS,这段JS可以访问浏览器环境的绝大多数可读取信息。
- 多层持久化配合:cookie、localStorage、service worker 等同时存在意味着要彻底“抹去”你需要跨多个位置操作,普通用户只清cookie往往不够。
- 指纹融合:用多个来源的数据(canvas + UA +时区 + fonts)生成的hash远比单一cookie更难模糊,换个网络/IP也可能被认出。
五、普通用户能做哪些防护(可操作的对策)
- 最简单第一步:养成定期清理浏览器数据(尤其localStorage、IndexedDB、service worker)。但要注意有些恢复技术需要清除缓存或手动注销service worker。
- 使用隐私浏览模式或独立浏览器profile来隔离不同目的的浏览行为,减少跨站点/跨用途的链接。
- 安装可信的反指纹/反追踪扩展(例如uBlock Origin、Privacy Badger、或专门的反指纹扩展),并配置拦截可疑脚本。
- 启用浏览器自带的追踪防护或使用注重隐私的浏览器(例如Brave或Firefox的严苛追踪保护),会降低被指纹的几率。
- 在需要时禁用JavaScript(或使用按需启用脚本的扩展),这样可以阻断大多数指纹脚本,但会影响功能。
- 对移动端,定期重置广告ID、审查应用权限,避免不必要的设备信息被采集。
六、针对网站与开发者的建议(如果你管理或开发网站)
- 在收集任何设备标识或用户数据前明确披露用途与存储方式,遵守当地隐私法律(如GDPR/CCPA)。
- 如果用于安全/反作弊,可考虑把识别做得更透明并提供opt-out或有限保留期,既保护业务也尊重用户权益。
- 减少不必要的持久化手段,避免使用多重冗余恢复机制来“悄悄地跟踪”同一用户跨会话。
- 提供明显的隐私设置与删除路径,让用户能方便地撤回或删除与其设备相关的标识。
七、我个人的实战小清单(点完之后如何“善后”)
- 在浏览器的Application面板里:unregister任何不明的service worker,清空Cache Storage与IndexedDB,删除相关localStorage项。
- 清除浏览器缓存和所有site cookies。
- 如果有订阅或推送权限,手动撤销或从浏览器设置中取消订阅。
- 若在移动端参与,考虑重置系统的广告ID或使用新的浏览器profile。
结语 一个看似无害的“点一下”可以触发一整条链,把你的设备信息以多种形式保存下来,并在今后把你认出来。了解这些细节并不是为了大惊小怪,而是为自己争取选择权:你可以接受轻量的识别以换取更好的服务或防作弊,也可以通过工具与设置最大程度减少被长期追踪。愿这篇追踪记录能帮你在点击之前多一分判断,在需要“隐身”时多一条可行路径。









