利用Etag来跟踪用户行为

转载:http://www.oschina.net/translate/cookieless-cookies?from=20130826

不使用 Cookie 的“Cookie”技术

有另一种方法可以跟踪用户而不使用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

我们该怎么去阻止它?

有一个方法我强烈推荐你做的就是, 任何时候你想更安全的浏览一个网页的话, 请开启一个隐私浏览窗口, 并仅使用https连接方式. 这么做能够单方面地消除形如 BREACH (最新的https攻击方式)攻击的影响, 禁止任何可能会产生的追踪cookie, 并且也能消除我在本页面所展示的缓存追踪的问题的影响, 我在网上购物的时候会使用隐私浏览模式. 在 Firefox 下(我想IE应该也是)快捷方式是 Ctrl+Shift+P, 在 Chrome 下则是 Ctrl+Shift+N.

除此以外, 这也取决于你的偏执级别.

由于缓存追踪实际上无法被侦测, 所以当前我还没有很直观的解决方法, 更因为缓存自身很有用(包括对你)并能够节省时间和金钱. 网站管理员们将会消耗更少的带宽(你可以想象一下, 终端用户最终将为这份因为更多的带宽而开具的账单埋单), 你的网页会更快加载, 尤其是在移动设备上会更加明显如果说你没有办理不限流量的4G套餐的话. 若你居住在有着高延迟, 低带宽的农村地区, 那就更糟糕了.

如果你非常疑神疑鬼,最好禁用所有缓存。这会阻止任何追踪的发生,但我个人认为得不偿失。

Firefox插件Self-Destructing Cookies,能在你不使用浏览器一段时间后,清空你的缓存。这也许是个不用禁用缓存的好选择;你 会在访问时被追踪,但他们通过看哪个IP访问哪个页面的方法早就做到了这一点,所以这种方法很合算。以后任何访问都仿佛来自另一个用户,如果所有其他的追踪方式也已经被阻止。

我不知道任何一款插件可以定期删除缓存(比如每72小时一次),但也许有。这对99%的用户来说会是个好主意,因为它限制追踪功能的同时,对性能影响较小。

更新: 我听说Firefox插件SecretAgent也使用ETag盖写来防止这种追踪手段。如果你是根据域名来阻止追踪,可以添加白名单来重新开启缓存。这款插件可以阻止追踪的功能已经得到 确认。 SecretAgent的网站.

时间: 2024-10-11 18:10:26

利用Etag来跟踪用户行为的相关文章

利用Keydown事件阻止用户输入

先了解下各事件的区别 KeyDown:在控件有焦点的情况下按下键时发生 KeyPress:在控件有焦点的情况下按下键时发生 KeyUp:    在控件有焦点的情况下释放键时发生 1.KeyPress主要用来接收字母.数字等ANSI字符.KeyDown 和 KeyUP 事件过程通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键 2.KeyPress 只能捕获单个字符,KeyDown 和KeyUp 可以捕获组合键. 3.KeyPress 不显示键盘的物理状态(SHIFT键),而只是

如何利用while语句根据用户输入要求打印菱形图案

需求:如何利用while语句根据用户输入要求打印菱形图案 diamond.py代码如下: x=int(input('Please input number: ')) i=1 j=1 while i<=x: j=1 while j<=x-i : print(' ',end='') j+=1 while j<=x: print('* ',end='') j+=1 print() i+=1 i=1 while i<=x-1: j=1 while j<=i : print(' ',e

利用降维方法进行用户为基础的协同过滤优化

原文作者:新浪微博@王小科科科本文由36大数据翻译组-大海翻译,转载必须获得本站.原作者.译者的同意,拒绝任何不表明译者及来源的转载! 如何提高推荐算法的有效性?主要的方法是特征转化,模型选取,数据处理等等.降维是特征加工中的一个重要部分. 这篇博文主要讲述如何利用降维方法来提高以用户为基础的协同过滤方式,协同过滤依赖测量用户的相似性进行物品推荐.我会在接下来章节里阐述所用到的每一种方法. 1.基准值 这个数值的有效性来自R(均方根误差)的计算.我通过三种平均值计算方法设定系统基准值.第一,项目

IOS学习之——地图2 跟踪用户位置变化

欢迎转载,转载请注明出处 本文地址:http://blog.csdn.net/zhenggaoxing/article/details/42707685 综述 mapkit提供了跟踪用户位置和方向变化的API,所以我们这里不用自定编辑定位信息,交给系统来搞. 添加framework 实现授权获取位置信息 在iOS8中,没有用户授权程序是无法获取定位信息的,所以我们需要在info.plist上添加两个键值: NSLocationAlwaysUsageDescription NSLocationWh

跟踪用户的方式

在PHP里面提供了3种跟踪用户的方式: ①  通过URL在后面附加参数来实现数据的传输 ② 使用cookie将用户的状态信息存储至客户端的计算机里面 ③ 使用session将用户的状态信息存储至服务器端的计算机里面 如果将用户的状态信息全部通过附加在URL后面来进行传递的方式,那么,工作量是非常巨大的.所以我们一般选择使用Cookie和session技术来实现数据的传递

利用ACS服务器实现用户的认证、授权和审计

需要分析: 某医院在中国北京.上海.广州.青岛等多个地方有分院和诊所,并通过SDH专线进行互联实现信息化连接,来实现办公网.视频会议等信息的传递.该院通过几年信息化,目前全国网络设备(包括交换机.路由器.防火墙.无线控制器等)共有大概200余台.全国共有IT人员十几人.为了管理方便,北京.上海等各城市的网络设备管理各自为阵,由各个地方的IT人员进行管理.而每个地方的所有设备的密码为了方便登录都设备成一致的,例如北京的设备密码都设置为bj001,上海的的设置密码为sh001.考虑到安全问题,密码每

Android手机上,利用bat脚本模拟用户操作

---- 那么你就可以来看看这篇帖子了. 言归正传 利用bat脚本模拟用户操作,需要用到两点: ①就是adb命令了,adb命令可以用来模拟用户在手机上的操作 ②bat语言,就是批处理语言,主要用来进行逻辑处理,跟众多语言语法一样,批处理语言也包括for循环.if语句之类的语法: 一.adb命令 首先我们来介绍模拟用户在手机上操作的adb命令 input keyevent //发送键盘事件 用法说明: adb shell input keyevent "value" usage: inp

django 利用钉钉 扩展用户系统

django 利用钉钉 扩展用户系统 用户架构图 说明 以django 自带 user,group 为基础 ,结合 钉钉用户系统 进行结合,以达到能够满足实际需求. 组关系: 钉钉部门组 通过 多对多 关系到 系统Group. 然后设置计划任务,如果 有钉钉部门组 关联到了 系统组,就把该用户组下的 用户 自动添加相应的 系统组. 组关系2: 自定义权限组 通过 多对多 关系到 系统Group. 根据 用户 系统组 的名字 查询到 自定义权限信息,进行判断 版本 Django==2.0.9 js

如何利用cookie来保存用户登录账号

众所周知,cookie在网页编写中不接或缺,今天就谈谈如何利用cookie技术来保存用户登录账号 1.首先是否保存用户登录账号当然是用户自行决定,所以我们需要在用户登录界面设置一个复选框,以此取得用户意愿信息,以便为下一步操作提供判断依据. require_once 'common.php'; 用户账号:</td><td><input type="text" name="id" value="<?php echo get