出家如初,成佛有余

基于浏览器的客户跟踪技术概述

Posted in Uncategorized by chuanliang on 2009/11/29

有人问起:在用户浏览器不安装插件的情况下,有什么好的手段来跟踪并识别用户身份的唯一性,防止在诸如匿名投票中用户重复点击。

大致整理了一下思路,目前用于跟踪识别用户身份大致采用如下一些方案:

1、在用户浏览器安装诸如Activex、Applet插件来跟踪用户

通过Activex、Applet插件来获取用户PC的CPU序列号、硬盘ID、网卡MAC地址等信息来唯一识别用户身份。

优点:由于CPU序列号、硬盘ID、网卡MAC地址等不会经常变动,因此获取的用户信息相对真实且唯一

缺点:需要用户手动安装插件,在这木马盛行的年代,用户对安装这样的插件都较为敏感;由于像Firefox、Chrome、Safari、Opera这样的浏览器并不支持Activex;对于Applet这样的末路黄花让用户安装更加不靠谱。

2、采用Flash Cookies(Local Shared Object )技术来跟踪用户

Flash Cookies或者是Local Shared Objects利用了Flash的SharedObject对象,其功能与浏览器中的cookies作用类似,可以用来存储相关的信息。

优点:
    Flash插件的广泛性,应该95%以上的浏览器都安装了Flash插件,能够较好支持Firefox、Chrome、Safari、Opera等浏览器;
    Flash Cookies相对于浏览器Cookie可以存储更多的数据,普通浏览器的cookies不能储存超过4K的资料,而Flash cookies则能储存达100K;
    Flash Cookies的跨浏览器,Flash Cookie可以跨Firefox、Chrome、Safari、Opera,用户在同一台PC用多个浏览器访问同一网站(同一个domain)后,Flash Cookies都一样,因此可以唯一识别一台PC。
    清除或禁用浏览器Cookies时候,不会影响Flash Cookies。
    因此Flash Cookie是一个较好跟踪用户的手段,值得推荐。
     按照Wikipedia的说法,查看一下自己的操作系统Flash cookie的存储路径,可以看到包括:google.com,macromedia.com,msn.com,yahoo.com,ebay.com等都采用了类似的方案。
    尽管用户也可以安装诸如BetterPrivacy 这样的插件或手工直接删除FlashCookie,但目前而言,知道Flash Cookie的用户较少。

3、通过HTTP Cookie来跟踪用户

    优点:大部分浏览器都支持,不需要任何单独插件
    缺点:在同一台PC上,不同的浏览器有不同的Cookie;Cookie很容易被用户手工清除或禁用;

4、通过IP地址来跟踪

   优点:直接在服务器端获取,不需要客户端任何支持
   缺点:对于在局域网内通过了NAT地址转换及使用了Proxy的用户,通过所获得的IP地址并不是很准确,不能正确识别同一个用户。

5、类HTML5的客户端本地存储方案

   HTML5规范提供了浏览器本地存储解决方案,这篇文章总结了各种浏览器所采用的类似于HTML 5的本地存储方案(不一定与HTML5 兼容)
  Firefox 3.5, Safari 4, IE8: HTML5 localStorage; these modern browsers all support the core localStorage functionality defined in the HTML5 draft. 
  Firefox 2.x and 3.0: Gecko globalStorage, a very early implementation similar to HTML5’s localStorage. 
  Safari 3.1 & 3.2: HTML5 Database Storage, because Safari 3.1 and 3.2 don’t support HTML5 localStorage. 
  IE6, IE7: userData persistence, a rarely used IE feature for associating string data with an element on a web page and persisting it between pageviews. 
  Google Chrome: Gears Database API, which is built into Chrome and thus doesn’t require a separate install. Surprisingly, Chrome doesn’t yet natively support any form of HTML5 Storage.

6、客户端本地存储方案

   基于各种浏览器客户端本地存储机制的问题,一些项目提供了客户端的本地存储机制,包括:PersistJSDojo StorageGoogle GearsTaffy DBYUI Storage Utility等。
   这篇文章对这些机制做了比较好的总结:
Dojo Storage

 * 优点:配备的文档较全,有较大的用户基础
 * 缺点:如果安装有Flash插件,只对Internet Explorer进行支持
 * 缺点:不支持基于WebKit的浏览器 (像Safari)
 * 缺点:运行时还需要其他Dojo库

 Google Gears

 * 优点:有Google作支持,像Dojo一样,配备的文档较全
 * 缺点:还没有广泛部署
 * 缺点:插件没安装就不能运行

 相比较而言,PersistJS项目试图对各种浏览器的本地存储机制进行封装,保证了API的一致性,是什么让PersistJS更好?

 * 很小(gzip压缩之后只有3k)
 * API一致,与所用浏览器无关
 * 无须浏览器插件和其它库
 * 当所用浏览器不支持时,会退而使用cookie
 * 声称支持IE、Firefox和Safari的新版本

Trying to address the need for client-side storage sans browser-specific techniques or browser plugins, Paul has created an abstraction layer that allows developers to use most of the most common client-side storage mechanisms via a common interface. It currently supports persistent client-side storage through the following backends:

  • flash: Flash 8 persistent storage.
  • gears: Google Gears-based persistent storage.
  • localstorage: HTML5 draft storage.
  • whatwg_db: HTML5 draft database storage.
  • globalstorage: HTML5 draft storage (old spec).
  • ie: Internet Explorer userdata behaviors.
  • cookie: Cookie-based persistent storage.

Other notables features include:

  • Small (9.3k minified, 3k gzipped)
  • Standalone: Does not need any additional browser plugins or
    JavaScript libraries to work on the vast majority of current
    browsers.
  • Consistent: Provides a consistent, opaque API, regardless of
    the browser.
  • Extensible: Custom backends can be added easily.
  • Backwards Compatible: Can fall back to flash or cookies if no
    client-side storage solution for the given browser is available.
  • Forwards Compatible: Supports the upcoming versions of Internet
    Explorer, Firefox, and Safari (Opera too, if you have Flash).
  • Unobtrusive: Capability testing rather than browser detection, so
    newer standards-compliant browsers will automatically be supported.

这样看来,采用PersistJS(或YUI Storage Utility,但YUI包还是太沉)是最优的方案,其次是Flash Cookie,然后是Cookie+IP的方案。

7、参考资料:

    http://en.wikipedia.org/wiki/Local_Shared_Object
    http://pablotron.org/?cid=1557
    http://developer.yahoo.com/yui/storage/
    http://www.infoq.com/news/2008/05/persistJS
    http://www.infoq.com/cn/news/2008/06/persistJS
    http://wonko.com/post/search-pad-browser-storage
    http://www.qgy18.com/2008/05/localstorage/
    http://safe.csdn.net/n/20091103/5083.html

No Responses Yet

Subscribe to comments with RSS.

  1. 俺去也 said, on 2009/12/31 at 11:01

    多谢分享,学习了

  2. […]       采用Flash Cookie、URL重写的方式传递Session信息的方案也可以归为此类。 […]


发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: