标点符(钱魏 Way)

如何获取用户访问过哪些网站

如何获取用户历史访问过的网站在分析用户使用习惯或者使用环境等都起来很重要的作用,比如说通过用户历史访问的网站类型,去划分用户。另外对于分析竞争对手的情况也能起到很好的作用。

用户的历史反问记录很大一部分存在了Cookie中,那么是否可以通过读取Cookie来获取用户的浏览记录呢?答案是否定的!那是否还有其他曲线救国的方案呢?

首先要介绍的是一个名为Css Hack的技术。这是在先前一篇文章 设置永远无法删除的Cookie中提到过。在大部分浏览器默认设置里,用户访问过的链接和没访问过的链接颜色是不同的:

  • 用户曾访问过的链接,链接颜色默认为紫色紫色
  • 用户未访问过的链接,链接颜色默认为蓝色蓝色

相关链接的颜色我们可以通过JS来获取CSS中A标签的伪类:visited伪类来获取颜色并辨别用户是否使用过某特定站点。由于此问题已经被各大浏览器厂商注意到,像Chrome、Safari 及Firefox已经对此漏洞进行了修复,目前此方案经测试尚可在IE浏览器上使用。

方案到此应该结束了,但是牛人们发现了另外一个方案:此方案来自于US BlackHat 2013的黑客会议上。相关话题为:PIXEL PERFECT TIMING ATTACKS WITH HTML5。讲的是使用HTML5中的requestAnimationFrame,根据浏览器渲染已访问过及未访问过的链接的时间差,判断指定链接是否访问过。

当浏览器渲染一个页面时,浏览器必须区分出某个链接是否曾访问过。每个浏览器都有一个记录访问过的链接的数据库,此时它要做的就是从这个数据库中查询指定的URL是否存在。

另外补充一个思路:通过请求http://www.example.com/favicon.ico 文件的载入时间的不同(如果访问过网站,则会调用缓存,响应会非常的快)来判断是否访问过某个网站。此方案未作测试。

另外寻找英文高手翻译此篇文章:PIXEL PERFECT TIMING ATTACKS WITH HTML5

参考文章:

http://krebsonsecurity.com/2010/12/what-you-should-know-about-history-sniffing/

http://jeremiahgrossman.blogspot.com/2006/08/i-know-where-youve-been.html

http://oldj.net/article/browser-history-sniffing/

码字很辛苦,转载请注明来自标点符《如何获取用户访问过哪些网站》

评论