伪cookie:Cookieless cookies

这是一种隐秘的跟踪用户的方式,它不依赖cookie甚至是javascript。这种跟踪方式已经被很多网站所采用,但是极少有用户知道它的存在。写这篇文章的目的是解析它的原理以及告诉人们如何保护自己的隐私。

这种跟踪方式可以正常工作却并不依赖下面所列出的条件:

  •     Cookie
  •    Javascript
  •    本地存储/会话存储/全局存储
  •    Flash,java或者其他插件
  •   IP地址或者UA头

它所使用的存储方式是在浏览器重启之前都一直稳定存在的缓存。

就算你彻底禁用了cookie,把javascript关闭了甚至用VPN服务上网,这些都不能阻止用这种技术来跟踪你。

示例:

当你阅读这篇文章的时候,你已经被跟踪记录下来了。好消息是我并没将你访问的会话ID同任何个人身份可识别信息联系起来。下面这就是我存储的关于你的所有信息:

cookieless

(原网站截图 91ri.org配图)

点击查看原文,刷新页面可见上图效果

在文本框输入一些文本然后点保存。然后关闭你的浏览器再次打开这个页面。看到它了吧。

检查你的cookie信息,有没有相关信息?显然是没有的,这一切的关键全在于一张”欺骗性图片”的校验信息,但是几乎没有人会注意到它。看到页面右上方的眼球图片了没?那就是我们的追踪器。

原理详解:

这张图片是一个总体概述:

ETag是图片的一个简短校验值。当图片改变的时候,检验值也随之改变。如果浏览器存储了一张图片并且知道它的检验值,它就把这些信息发送到服务器去认证,服务器会检查校验值确认图片是否改变。如果检验值一致说明图片未改变,那么浏览器就不用再次获取这个图片同时很多数据将被保存下来。

细心的读者看到这里应该能明白如何用这种方式跟踪用户了:通过浏览器发送到服务器来验证的Etag信息。这看起来很像cookie,有没有?服务器可以给每个浏览器一个不一样的ETag,当浏览器再次访问服务器的时候,去数据库检索发来的ETag信息。

关于这个演示例子的一些技术细节:

为了证明这种跟踪方式没有利用javascript,我找了一些除了ETag之外相对特别的东西。那个眼球图片是在页面载入以后才加载的,但是他是唯一一个含有ETag信息的图片。那我又如何在页面上显示最新的信息呢?结果是我无法动态更新页面信息除非我引入javascript,但我又必须避免使用javascript因为我想证明这种方式不需要利用javascript。

这个鸡生蛋还是蛋生鸡问题带来了一些bug:

-所有你看到的信息是来自你上次页面载入时的信息。点击F5刷新可以看到最新数据。

-当你访问一个不带ETag信息的页面(就像匿名模式),你的会话信息将被清空。同样,只有在你重新载入页面后才能看到效果。

我找不到一个简单的办法来解决这些问题。当然有些事情可以做,但这些事其他网站不会使用,而且我想保持代码尽可能的简单,尽可能的接近现实。

要注意到这些问题通常不会在你真正想跟踪用户的时候发生,因为你不会打算把这些跟踪信息显示出来让他们知道。

源码地址:

https://github.com/lucb1e/cookielesscookies

如何防止被追踪:

如果你想在浏览网页的时候更安全点,我强烈建议你打开浏览器的隐私浏览模式同时使用https连接。做这个一手消除所有痕迹的行为像是BREACH(最新的https攻击),这会使所有可能跟踪信息的cookie全部失效,同时使如我所演示的利用缓存的跟踪方式也无法再起作用了。我在用网银的时候会使用这种隐私浏览模式。在火狐可以按Ctrl+Shift+P,chrome中按Ctrl+Shift+N快捷键可以切换到隐私浏览模式。

除此之外,这还取决于你的强迫症的程度。

我现在还没有简单的方法来阻止缓存跟踪,因为它几乎是无法被检测到的,但是缓存本身是很有用的它可以节省花费的时间和金钱。利用缓存,网站管理员能节省网站的带宽,页面加载速度更快,这在你没开通无限4G流量套餐的时候用移动设备访问互联网的时候显得尤为重要。如果没有缓存,当你在农村生活的时候,那儿的网络带宽低延时高,情况就变得很糟糕了。

如果你的强迫症很严重,最好的方法就是同时把缓存禁用了。这将会使所有的跟踪方式失效,但是我个人觉得这样做得不偿失。

火狐的插件Self-Destructing Cookies可以在你不用浏览器一段时候后清空缓存。这也许是个好的替代选择来禁用缓存跟踪;你只能在访问网站期间被追踪,而且网站还可以追踪记录哪些页面被那些IP访问,所以这其实没什么大不了的。假设其他所有的追踪方式已经被阻止的情况下,一段时间后的访问就会被网站当做来自不同的访问者。

我不知道插件周期性清除缓存的时间,可能是每72小时一次。这是对99%用户都好用的选择,它有一个相对较低的性能影响,但同时仍然限制跟踪能力。

更新:

     我听说火狐的插件SecretAgent能通过ETag重写来阻止这种方式的跟踪,你可以添加白名单网站来允许网站缓存同时阻止其他网站的跟踪。现在已经确认这种方式可以阻止通过Etag进行跟踪。SecretAgent’s website.

日币奖励:

本文为原创译文、首发,根据本站积分规则给予日币奖励共4枚。

 

AD:本站开放投稿及积分(日币),日币可兑换实物奖励,每月top3可获得礼品一份。