HTML 5 APIs 是如何跟踪用户轨迹的
如果你认为 IP 地址、cookies 和 HTTP 头是在 web 上唯一标识和跟踪用户的要素的话,那么你就大错特错了!
新的现代化特征辨别技术依赖于以下多种要素:
- IP地址
- Cookies
- 语言
- 时区
- HTTP 头(用户代理, 参考页等)
- HTML5 APIs(WebRTC, Battery API等)
- HTML5 和 CSS3 特征检测
- CSS 媒体查询
- WebGL
- 浏览器插件(Flash, Silverlight, Java等)
- 浏览器加载项
- 浏览器选项(阻止浏览器追踪等)
- 浏览器存储
- 系统字体
- TLS/SSL 会话ID
- 硬件检测(摄像头,麦克风,触摸屏等)
- 屏幕(分辨率,色彩深度,像素等)
- 音视频编解码器
- 装配特征
最近 W3C 在 HTML 标准中允许开发者与用户设备通讯,以增强网页、App 和游戏设置。很多 API 被开发出来以便更精准的辨别用户身份已不足为奇。
什么是指纹特征呢?
想象一下,当你走进一家商店入口处,一个高级的摄像头对你进行扫描,然后保存你的相关信息,如:体型、身高、肤色、服饰、鞋子、走路姿态、语调等。所有这些数据将被排成一个序列,然后通过一个哈希函数来计算你的特征图谱。下次你再来到这家商店或属于相同机构的其他商店时,通过快速分析你的特征,即使你着装风格不同,也能将你与之前访问的那个人联系起来。
使用浏览器访问网页也同样如此(不需要用户做任何特别的操作)。无论你尚未登录或者禁用 cookies,它都可以将用户与一个标识联系起来,它还不是百分之百的准确但一直在改进。
电子前线基金会( Electronic Frontier Foundation)在出版的“Web浏览器如何独特?”(PDF)一文中研究了浏览器的用户跟踪。WebKit Wiki和Wikipedia上有设备识别的精确描述。
客户端的JavaScript
如果你想对指纹特征有更好的了解,可以查询一下 web 开发者专用的 JavaScript 库:Fingerprintjs2。
要想有效地防止识别指纹特征的脚本运行,你可以通过阻止全局 JavaScript 的运行来实现,又或者使用 NoScript 或者 uMatrix 拓展。但还有很多因素会暴露过多与你相关的信息,并且会继续保存在其他未知的指纹特征方式中。
HTML5 APIs
得益于新型的 HTML5 标准,开发者在某些情况下不需请求批准,就有有权限去获得和检测的用户信息或硬件设备。以下的 API 仍 处于无监管下被滥用。要避免这种情况,最普遍的方法是禁止 JavaScript 运行,或者使用特殊的加载项。
Canvas
这是令人讨厌,隐秘和(启用 javascript)几乎就不可停止的技术,从 2012 年以来就积极被利用,在广泛使用的脚本(记得添加这个 “探索”找到替代品放到 cookies 中)中偶尔嵌入。
当浏览器访问一个网页是一个 canvas 的指纹脚本,它就被要求去绘制一个隐藏的图形并转换为一个令牌。令牌的独特性等因素取决于浏览器,操作系统和安装的图形硬件。
为了避免 Canvas 指纹你可以:
- 显示全局 javascript
- 使用 NoScript, uMatrix 或者 CanvasFingerprintBlock (仅Chrome支持) 扩展
- 使用 Tor 浏览器
电池
由于检测电池状况的 API 能够获得设备电池的充电时间和放电时间。这些数据一旦结合起来就会近似于每个设备和电池状态的特征,成为网络中跟踪活动的潜在因素。
一篇名为《正在泄露的电池——对 HTML 5电池信息 API 的隐私调查》的论文针对 Linux 系统上的 Firefox 浏览器用户进行了调查。其中最深刻的研究结构是:“我们打算对电池状态 API 进行小改造,并在 Firefox 浏览器里运行,去定位调查中的隐私流出。后来,我们给 Firefox 的漏洞汇报被接受了,而且开始修复漏洞。
在 Chrome 浏览器,你可以安装名为 Battery Info Blocker 的加载项去禁止网站获取你的电池信息。
WebRTC(Web Real-Time Communication,网页实时通信)
当你不使用 WebRTC 时,应当禁止它。WebRTC 不仅会泄露你的本地 IP 地址,还会在 VPN 上泄露你的 IP 地址(在 Windows 系统下),这不同于采集系统的指纹特征的因素。
为了避免 WebRTC 泄露你的隐私,应该使用 Firefox 浏览器并且禁止 WebRTC,这可以通过打开about:config,找到值为 media.peerconnection.enabled 的项并且设置成 false
在 Chrome 中,你可以安装名为 WebRTC 的加载项,否则会发生隐私泄露。
资源时序
开发者能够使用 API 去收集完整的与文件资源有关的时序信息。在 Working Draft 中有表达对隐私的担忧:“统计性的指纹特征是一种对隐私的担忧,恶意网站会通过检测浏览器缓存的时序信息,包括访问和忽略第三方网站的资源,来判断使用者是否访问过第三方网站“
如果你使用 Firefox 浏览器,可以通过打开 about:config,并且把选项 dom.enable_resource_timing, dom.enable_user_timing 和 dom.performance.enable_user_timing_logging 设置为 false,来阻止这些 API 运行。
在 Chrome 浏览器下,唯一的办法是禁止 JavaScript 脚本运行。
Geolocation(地理位置)
如果使用这个功能,它会泄露你的物理位置,侵犯你的隐私。现代浏览器总是询问许可来泄露地理位置给网站和 app。
在 Firefox 上禁用这个功能,你应该在地址栏上输入 about:config,找到 geo.enabled 的值,设置其值为 false。
在 Chrome 点击设置(Settings),从显示高级设置(Show advanced settings)上,找到隐私(Privacy)并且点击内容设置(Content settings), 在窗口里找到定位(Location)并设置选项不允许任何网站追踪你的物理位置(Do not allow any site to track your physical location)。
硬件指纹识别
一篇名为 “ Hardware Fingerprinting Using HTML5” 的论文(PDF)提到,有一项新的潜在的技术,它基于与硬件设备通信的能力,来获取特定的硬件指纹,作为对基于软件的指纹(浏览器,操作系统,等)的补充。
这篇论文提到,例如 GPU(现代浏览器使用硬件来加速),摄像机,扬声器,麦克风,运动传感器,GPS 和电池等硬件,都可以被 HTML5(未必需要用户许可)访问,尤其是 GPU,对进行指纹识别的用户很有用。
权益,请及时联系我们