越看越不对劲,我把这种“在线观看入口”的链路追完了:你点一下,它能记住你的设备指纹

黑料反差 63

越看越不对劲,我把这种“在线观看入口”的链路追完了:你点一下,它能记住你的设备指纹

越看越不对劲,我把这种“在线观看入口”的链路追完了:你点一下,它能记住你的设备指纹

前几天点了个“在线观看入口”,本以为是个普通的跳转,结果一条看似简单的链路把我带进了一个“记录你设备”的机器。点一下——整个浏览器、屏幕、字体、时区、网络信息都被悄悄量了一遍,然后生成了一个能长期识别你的“设备指纹”。把追查过程写下来,给大家看看这种链路长什么样、会收集什么、能做什么,以及普通用户能怎么避开或缓解。

一、我怎么查的(简单复现步骤)

  • 打开浏览器开发者工具(Network / Application)。把Network保持开启,并勾选Preserve log,方便跟踪重定向。
  • 点击“在线观看入口”,观察第一跳到最后一跳的所有请求(302/307重定向尤其要关注)。
  • 在Application面板查看Cookie、LocalStorage、IndexedDB、Service Workers、Cache Storage,搜索可疑键名(fp、deviceid、visitor、uid等常见字段)。
  • 在Console里打断点、打印 navigator、screen、performance 等对象,观察页面脚本何时读取这些信息。
  • 用第三方域名列表和扩展(uBlock Origin、Privacy Badger)对比被加载的脚本。

二、典型链路长这样(常见手法汇总) 1) 链接 → 跳转追踪域(redirect.tracker.example) 点击后并不是直接到播放页,而是先跳到一个追踪域,追踪域收集浏览器可见信息(User-Agent、Accept headers、Referer、IP),同时返回一个带有参数的重定向地址。

2) 加载第三方脚本(cdn.tracker.example/js/fp.js) 页面被注入指纹采集脚本(常见的有FingerprintJS或自研脚本),这些脚本会运行多项探测:canvas绘图、AudioContext、字体探测、WebGL信息、屏幕与像素比、时区、内存与CPU线索、插件/扩展痕迹、触控能力等。

3) 生成指纹(hash)并存储 将这些观测值拼成字符串并做哈希,生成一个设备ID(例如 d41d8cd98f00b204e9800998ecf8427e)。这个ID经常被写入:

  • 第三方Cookie(长生命周期)
  • localStorage / sessionStorage
  • IndexedDB
  • Cache Storage / Service Worker(用于更顽固的持久化)
  • 有时会通过ETag或缓存策略实现“被删也能复活”的效果(evercookie变体)

4) 后续识别与关联 此设备ID会和你的IP、页面行为、账户信息(若你有登录)关联。下次再访问包含该追踪器的任何页面,就能把你“认出来”,即使你删了普通Cookie,也可能通过IndexedDB/Cache/ETag把ID恢复。

三、具体能获取和推断的信息

  • 明显可见:User-Agent、操作系统、浏览器版本、屏幕分辨率、语言、时区、显卡、WebGL信息
  • 隐式探测:已安装字体列表、启用的插件或扩展指纹、音频指纹(AudioContext)、canvas图像渲染差异产生的哈希
  • 网络信息:公网IP、通过WebRTC可探到局域网IP(若未做隔离)
  • 存储痕迹:是否曾访问过某些站点、登录状态的间接指示

这些信息合起来往往足够生成一个高概率区分度很高的“设备指纹”,用于跨站点追踪、广告定向、甚至风控(识别异常设备行为)。

四、如何亲自检测该类链路(要点)

  • 看Network里是否有大量跨域请求,尤其是域名和页面主体不一致的请求。
  • 查找是否存在名为fp、fingerprint、device_id、visitor的cookie/localStorage/IndexedDB键。
  • 打开Console执行: navigator.userAgent navigator.platform screen.width + 'x' + screen.height navigator.languages performance.timing 以及查看是否存在注册的service worker:navigator.serviceWorker.getRegistrations().then(r=>console.log(r))
  • 如果想看canvas指纹是否被读取:在Console执行document.createElement('canvas')并覆盖canvas的toDataURL方法暂时观察调用情况(专业用户可用更安全的脚本)。也可以安装CanvasBlocker类的扩展来检测和阻止canvas读取。

五、能做什么:风险与用途

  • 广告平台用于跨域追踪和投放优化。
  • 内容平台用于识别同一设备的滥用、破解或共享账号行为。
  • 更糟糕的场景:在没有透明告知和同意的情况下长期记录用户,并与账户信息合并后形成永久画像。

六、普通用户可采取的防护措施(按难易度排序)

  • 安装并启用 uBlock Origin、Privacy Badger:大幅阻止第三方脚本和已知追踪域。
  • 使用隐私模式并在关闭窗口时彻底清除所有site data(注意:隐私模式并不能防止指纹被即时读取,只是不会持久化到常规存储)。
  • 使用Firefox + privacy.resistFingerprinting 或 Tor Browser:这些浏览器内置了抗指纹策略,把许多可观测差异标准化。
  • 禁用或限制JavaScript(NoScript、uMatrix):最有效但会影响页面功能与观看体验。
  • 屏蔽WebRTC(防止局域网IP泄露)或通过浏览器设置限制。
  • 使用容器/多账户(Firefox Multi-Account Containers)或不同浏览器处理不同类型的访问(把不信任的网址放一台“干净”的浏览器里)。
  • 使用VPN以降低IP与指纹直接关联的概率,但VPN不能阻止指纹本身被采集。

七、如何清理“顽固”痕迹(步骤示例) 这些操作可以在浏览器Console或开发者工具里做:

  • 注销并删除service worker: navigator.serviceWorker.getRegistrations().then(regs => regs.forEach(r => r.unregister()))
  • 删除localStorage、sessionStorage: localStorage.clear() sessionStorage.clear()
  • 删除IndexedDB(在支持 indexedDB.databases 的浏览器): indexedDB.databases().then(dbs => dbs.forEach(db => indexedDB.deleteDatabase(db.name)))
  • 清理Cache Storage: caches.keys().then(keys => keys.forEach(k => caches.delete(k)))
  • 清理Cookie(Application -> Cookies)并在退出浏览器时彻底清除缓存与站点数据。

八、给站长与开发者的建议 逐步减少对无用户同意的指纹技术依赖。对敏感追踪应征得明确同意,使用匿名化或聚合数据替代设备级唯一ID。如果用于安全风控,也应明确告知并保留最短必要期限。

标签: 越看越不对劲