技术开发 频道

无需使用“Cookie”的Cookie缓存技术

        【IT168 技术】有另一种方法可以跟踪用户而不使用Cookies或Javascript。这种方法已经被用于无数网站,本文解释这种方法是如何运作的,以及是如何保护你自己的。

  这种跟踪方式 无需使用:

  • Cookies

  • Javascript

  • LocalStorage/SessionStorage/GlobalStorage

  • Flash、Java或其他组件

  • 你的IP地址或是用户代理字符串(User Agent String )

  • 任何Panopticlick所使用的方式

  相反,它使用另一种存储方式,在浏览器重启的时候也可以保持持久性,这就是:caching

  即使你完全禁用cookies、关闭Javascript功能并且使用VPN,这种技术依然可以追踪到你。

  在线示例:http://lucb1e.com/rp/cookielesscookies/

  我们继续,输入一些东西然后保存。接着关闭你的浏览器再一次打开这个页面。它是不是还在那儿呢?

  检查你的cookies,有没有?当然没有,因为它完完全全在一张假图片的校验和里,几乎没人能意识到。看到页面顶部右边的眼睛了吗?这就是我们的跟踪器。

  那么它是怎么运作的呢?

  图片中的ETag是一种校验和。当图片改变时,校验和也会改变。所以当浏览器有图片并且知道校验和时,它可以将校验和传送给web服务器来验证。然后web服务器验证图片是否改变。如果没有,就不用重新传送图片了,省下了不少数据流量。

  细心的读者或许已经注意到,可以这样追踪人群:浏览器发送回给服务器的信息就是它之前所接收到的(ETag)。这听起来和cookies十分相似。服务器可以给每个浏览器一个唯一的ETag,浏览器再次连接时ETag可以从数据库中找出来。

  本例的技术要点(以及bug)

  为了描述它是如何不必使用Javascript就可以生效的,我必须找一些专属与你的信息,ETag除外。图片在页面加载完后加载,但只有图片包含ETag。我要怎样在页面上显示实时信息呢?结果是在不动态刷新页面的情况下,我不能做到这一点,但动态刷新要用到Javascript,这又是我所想避免的。

  这个鸡生蛋,蛋生鸡的问题引出了一些bug:

  • 所有能见的信息都是之前页面加载的。只有按F5可以看到新的数据。

  • 当你浏览一个页面而你没有ETag的时(比如匿名模式),你的session会被清空。只有重载时才能再次看到。

  我没见过有简单的方案可以解决这些问题。当然事在人为,但不像其他网站,而且我想尽量保持代码简单并贴近现实。

  注意在你真的要追踪用户时,这些bug一般不会存在。因为你不会想让用户知道他们在被追踪。

  源代码

  什么项目没有源代码呢? 哦对,是微软的Windows。

  https://github.com/lucb1e/cookielesscookies

0