有另外一种比较隐蔽的用户追踪技术,不使用cookie或者Javascript。很多网站已经在用了,但知道的人不多。本文就来介绍一下这种技术是如何追踪用户,用户又该如何避免追踪。

这种技术不依赖于:

  • Cookies
  • Javascript
  • LocalStorage/SessionStorage/GlobalStorage
  • Flash, Java或插件
  • 你的IP地址或者User Agent头
  • Panopticlick

相反,它使用另外一种存储方式,而这种存储即使浏览器关闭仍然能够存在,那就是浏览器缓存。 即使你完全禁用了cookie和Javascript,甚至使用VPN服务,这种技术仍然能够跟踪到你。


示例

到这个链接(http://lucb1e.com/rp/cookielesscookies/ )上提交一些数据,然后关闭浏览器,然后再打开,看看数据是不是仍然在那里?

看一下你的Cookie里面的有没有东西?没有的吧,这些都在我们几乎没有察觉到的一个假的图片校验。看一下上面那个眼睛,哈哈,那是我们的追踪者。

它如何工作?

下图是一个大致描述

图像中的ETag是一种图像校验方式,当图像发生变化的时候,ETag也会随之发生变化。因此,浏览器会拿着图片和ETag去服务器进行校验,让服务器来应答这张图片是否发生改变,如果没有的话,这张图片就直接从浏览器缓存中命中返回,无需再去服务器重新拉取图片了。

细心的读者可能已经大概知道这个是如何可以实现追踪的:浏览器把之前的ETag发回到服务器就OK了。不过,通过这个ETag貌似能产生好多好多Cookie,不是吗?于是,服务器可以给每个浏览器一个唯一的ETag,再次收到这个ETag的时候,就能知道是你了。

Demo中的一些技术细节和缺陷

Demo为了能够不借助于Javascript,我不得不找出一些信息对你来说是唯一的,除了那个ETag。图片是在页面加载后加载的,不过只有图 片里面有ETag。我是如何将时间信息显示出来呢? 我确实做不用Javascript动态更新数据,而这Demo就是要证明不用依赖Javascript。

一些小bug:

所有你看到的信息都是上一次的。需要按F5才能刷出最新的。
当你访问页面的时候不携带ETag (比如隐身模式),会话就会被清空。 或者说,你刷新页面的时候,数据就会消失。
我没有看到这种技术的比较简单的解决方案。当然有些东西可以做一下,可能其他网站不会用,不过我就是想让代码简单实用就行。

请注意,当你确实想去追踪某个人,你又不打算告诉用户他们正在被追踪,你这些bug是不存在的!

源代码

哪个程序没有源代码? 噢,好像是微软的Windows。

https://github.com/lucb1e/cookielesscookies

如何避免追踪?

如果你想更安全一些, 我强烈建议你开启隐身模式,使用HTTPS。只要这样开一下,就能防止BREACH (最新的https攻击),禁止了cookie跟踪,也消除本文讲到的缓存跟踪的问题。用网银的时候,我会使用隐身模式。在Firefox(IE应该也 是)按Ctrl + Shift + P,在Chrome中按Ctrl + Shift + N。

除此之外,要看你对于隐私安全的洁癖程度了。

目前,我没有简单完美的办法,因为缓存跟踪几乎是无法察觉的,但同时缓存本身很有用,能够节省时间和金钱。网站将消耗更少的带宽(你仔细想想,到底 是谁会为这些流量买单),你的网页加载速度更快,尤其是在移动设备上,将会有很大的区别,如果你没有一个无限流量的套餐的话,如果你在网速很慢的地方,缓 存的效果就更加明显了。

听了这些,如果你还是不放心,那么完全禁用缓存吧。没有了存储性状态或者信息,任何追踪都不会发生,就是每次都要重新加载,速度会慢一些,并且我个人并不认为值得这样做。

Firefox的插件Self-Destructing Cookies有这样的功能:当你一段时间不使用浏览器,它就会清空你的缓存。这个插件的定期清空缓存可能是一个不错的选择,只有在访问会话期间会被追 踪,不过反正他们也能够记录下哪个IP访问了哪个页面,所以这是没有什么大不了的。不过之后的访问由于缓存被清空(假设跟踪是基于缓存),看起来都是一个 新的用户,追踪将无法继续。

我不知道任何其他能够定期清除缓存的插件(例如,每72小时一次),但应该是有的。这将是一个很好的方法,这对于99%的用户都是有用的,因为这个并不会使性能下降太大,同时还限制了追踪。

更新:我听说Firefox的插件SecretAgent也有ETag的覆盖,以防止这种类型的追踪。你可以对于有些站点设置白名单重置缓存,以达到防止追踪的目的。这个已经确认能够防止追踪。SecretAgent 的网站。

原文地址:http://lucb1e.com/rp/cookielesscookies/

[转]不用Cookie的“Cookie”技术的更多相关文章

  1. 客户端技术:Cookie 服务端技术:HttpSession

    客户端技术:Cookie 服务端技术:HttpSession 07. 五 / android基础 / 没有评论   一.会话技术1.什么是会话:客户打开浏览器访问一个网站,访问完毕之后,关闭浏览器.这 ...

  2. 理解cookie和session技术

    一.HTTP协议的无状态性 WEB应用程序使用的是HTTP协议传输数据的,HTTP协议是一个无状态的协议,这次数据传输完毕,客户端会和服务端断开连接,再次传输数据就需要重新建立新的连接,这也就无法会话 ...

  3. 6.19-response(响应),session(会话技术,服务器端技术) 内置对象,application(内置对象),pageContext (内置对象),cookie(客户端技术)

    一.response(响应) 页面重定向 response.sendRedirect(""); 转发: request.getRequestDispatcher("&qu ...

  4. Cookie&Session会话技术

    一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客 ...

  5. PHP学习10——Cookie和Session技术

    主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...

  6. 什么是Cookie。Cookie的原理介绍,Cookie的简单应用

    1 介绍:Cookies亦称Cookie .Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术.Cookies是当你浏览某网站时,由Web服务 ...

  7. 读取Cookie及Cookie所有属性操作方法

    读取Cookie及Cookie所有属性操作方法 2013-08-04 22:21:43|  分类: 技术 |  标签:cookie  |举报|字号 订阅   要把Cookie发送到客户端,Servle ...

  8. 07: jquery.cookie操作cookie

    1.1 jquery.cookie常用方法 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术 1. 添加一个"会话cookie" $.cook ...

  9. [document.cookie]为什么cookie不在window下的呢.奇怪了[未完待续]

    什么是cookie,怎么就叫cookis,它能干嘛 我猜吧,就是登录页面的时候传值,二次登录的时候可以给你说句'hello xxx'; 下面这堆比较啰嗦,随意看吧 //cookie 用户储存在用户本地 ...

  10. asp.net,cookie,写cookie,取cookie

    Cookie是一段文本信息,在客户端存储 Cookie 是 ASP.NET 的会话状态将请求与会话关联的方法之一.Cookie 也可以直接用于在请求之间保持数据,但数据随后将存储在客户端并随每个请求一 ...

随机推荐

  1. 使用 fastlane 实现 iOS 持续集成(转)

    http://www.cocoachina.com/ios/20150916/13433.html 简介 持续集成是个“一次配置长期受益”的工作.但很多小公司都没有.以前在做Windows开发配置感觉 ...

  2. 数据结构:最小生成树--Prim算法

    最小生成树:Prim算法 最小生成树 给定一无向带权图.顶点数是n,要使图连通仅仅需n-1条边.若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost ...

  3. oracle优化思考-双刃剑

    oracle优化是一个双刃剑,特别注意这把剑用的场合:系统规划OLTP or OLAP 优化1:索引 在DML操作时.必须维护索引.假设大量的DML操作,想想看,IO是不是老高了? 索引长处:在非常多 ...

  4. HTML5音乐可视化

    环境搭建 1,安装nodejs和Git,配置环境变量2,安装express,npm install -g express-generator3,创建项目,express -e music(项目名称)4 ...

  5. linux ftp 安装及相关命令

    1.VSFTP简介 VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全. 安全性是编写VSF ...

  6. 10个简单步骤,完全理解SQL

    此文章为转载 1. SQL 是一种声明式语言 首先要把这个概念记在脑中:“声明”. SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果.这是不 ...

  7. Java SE 8 for the Really Impatient读书笔记——Java 8 Lambda表达式

    1. lambda表达式的语法 lambda表达式是一种没有名字的函数,它拥有函数体和参数. lambda表达式的语法十分简单:参数->主体.通过->来分离参数和主体. 1.1 参数 la ...

  8. git管理修改

    为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改 ...

  9. 十个最值得阅读学习的C开源项目代码

    1. Webbench Webbench 是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以 模拟3万个并 ...

  10. 基于jQuery的前端如何做到无伤迁移

    首先,解释一下我个人对前端无伤迁移的理解,即移动端和PC端使用同一套代码,或者说原本在PC端运行得很完美的代码,只要修改少许,就可以在移动端完美运行. 当然,大部分的公司会专门为移动端设计了一套,同时 ...