`
天梯梦
  • 浏览: 13734582 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

取代cookie的网站追踪技术:”帆布指纹识别”初探

 
阅读更多

博文作者:rices

发布日期:2014-07-28

阅读次数:4120

博文内容:

 


【前言】


一 般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广 告(精准化营销)或其他有针对性的一些活动。Cookie技术是非常受欢迎的一种。当用户访问一个网站时,网站可以在用户当前的浏览器Cookie中永久 植入一个含有唯一标示符(UUID)的信息,并通过这个信息将用户所有行为(浏览了哪些页面?搜索了哪些关键字?对什么感兴趣?点了哪些按钮?用了哪些功 能?看了哪些商品?把哪些放入了购物车等等)关联起来。

而 随着网民对个人隐私的重视,Cookie越来越不受待见。不少安全工具甚至是浏览器都开始允许或引导用户关闭Cookie功能,比如很多主流浏览器都有一 个“隐私模式浏览”功能。这样以来,网站就很难追踪用户行为了。但仍然有一些方法可以让网站去追踪每一个访问者的行为,比如通过flash cookie的方式也可以达到唯一标识和追踪的目的。

笔 者近期注意到,国外媒体报道了一种非常难以摆脱的新型在线追踪工具被用来尾随从白宫官网到xx网站xx.com的热门网站的访问者。经过分析, 这个就是另一种比较新的访客追踪技术:“帆布指纹识别”技术,具体代码见附录6。这个技术的独特之处是:它不像通过Cookie或者Flash Cookie等之类的方式,你基本是无法屏蔽它的。

 

【原理分析】


笔 者收集整理了很多知名站点上的类似代码,详见附录4,从这些“帆布指纹识别”代码可以看出,均使用到了HTML5专属标签<canvas>的 一个现状:在绘制canvas图片时,同样的canvas绘制代码,不同机器和浏览器绘制的图片特征是相同并且独一无二的,这样以来,提取最简单的md5 值便可以唯一标识和跟踪这个用户。

 

一段产生canvas元素的javascript代码:

var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var txt = 'http://security.tencent.com/';
ctx.textBaseline = "top";
ctx.font = "14px 'Arial'";
ctx.textBaseline = "tencent";
ctx.fillStyle = "#f60";
ctx.fillRect(125,1,62,20);
ctx.fillStyle = "#069";
ctx.fillText(txt, 2, 15);
ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
ctx.fillText(txt, 4, 17);


获取绘画的内容,需要使用到canvas.toDataURL()方法,该方法返回的是图片内容的base64编码字符串。对于PNG文件格式,以块(chunk)划分,最后一块是一段32位的CRC校验,提取这段CRC校验码便可以用于用户的唯一标识:

var b64 = canvas.toDataURL().replace("data:image/png;base64,","");
var bin = atob(b64);
var crc = bin2hex(bin.slice(-16,-12));
console.log(crc);

 
chrome
隐身模式测试:


同一机器的chrome浏览器,无论正常模式还是隐身模式,得到的crc值始终一致。而对于不同机器得到的值是不同的,追踪效果显而易见。


看 到这里,相信很多人想问,Why?为什么会出现这样的情况?同样的js代码,在不同设备的浏览器上,结果是唯一并且各不相同的。这到底是为什么?其实原因 很简单,同样的HTML5 Canvas元素绘制操作,在不同的操作系统不同的浏览器上,产生的图片内容其实是不完全相同的。出现这种情况可能是有几个原因:


1、
在图片格式上,不同web浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等。

2、在像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。


因此,即使是相同的绘图操作,最终产生的图片数据在hash层面上依然是不同的。这个具体代码层面,恐怕要去搞懂各个主流浏览器的实现和以及操作系统的渲染。笔者精力所限,短期很难给出。大家可以自行摸索下,欢迎交流
J

 

【后话】


HTML5
千变万化,利用canvas 这一特性来实现用户追踪,目前并没有好的对抗方案,未来也只能依靠广大浏览器厂商自行了断,实现canvas绘图机制的随机化或许可以很好的保护用户隐私,防止被追踪。


文 中涉及到的代码和技术细节,只限用于技术交流,切勿用于非法用途。另外,如果想要研究更多的用户追踪技术,推荐去研究下大名鼎鼎的专注于访客追踪的开源项 目:evercookie【附录5】,这个猥琐的小工具,通过几乎所有你想到和想不到的方式(Cookie、Flash、Silverlight、Web History、HTTP ETags、Web cache、window.name caching、userData storage、HTML5、甚至是java的漏洞等)来跟踪访问网站的用户行为。

 

【附录】

[1] http://cseweb.ucsd.edu/~hovav/dist/canvas.pdf

[2] https://securehomes.esat.kuleuven.be/~gacar/sticky/index.html

[3] https://panopticlick.eff.org/browser-uniqueness.pdf

[4] 部分“帆布指纹鉴别代码”地址列表:

http://ct1.addthis.com/static/r07/core130.js 
http://i.ligatus.com/script/fingerprint.min.js
http://src.kitcode.net/fp2.js 
http://admicro1.vcmedia.vn/fingerprint/figp.js 
http://shorte.st/js/packed/smeadvert-intermediate-ad.js 
http://stat.ringier.cz/js/fingerprint.min.js 
http://cya2.net/js/STAT/89946.js 
http://images.revtrax.com/RevTrax/js/fp/fp.min.jsp 
http://rackcdn.com/mongoose.fp.js

[5]  evercookie官网 http://samy.pl/evercookie/

[6]  使用帆布指纹识别技术的库fingerprintjs 官网 https://github.com/Valve/fingerprintjs

[7]  https://www.browserleaks.com/canvas#how-does-it-work

 

原文:http://security.tencent.com/index.php/blog/msg/59

分享到:
评论

相关推荐

    js实现帆布指纹识别

    JavaScript实现的帆布指纹识别是一种现代Web开发中的技术,它被用来作为一种替代传统Cookie的用户识别方法。在当前隐私保护意识日益增强的环境下,Cookie由于其可清除性和跨域限制,已经不能满足某些应用场景的需求...

    御剑WEB指纹识别.rar

    "御剑WEB指纹识别"这个标题指的是一个专门用于Web应用程序指纹识别的工具或技术。在网络安全领域,尤其是渗透测试中,指纹识别是确定目标系统类型、版本和配置的重要步骤。"御剑"可能是这个工具的名字,暗示其具有...

    御剑WEB指纹识别

    该系统的运作原理基于WEB指纹技术,这种技术通过收集和分析目标网站的HTTP响应头、服务器标识、脚本语言、Cookie设置、错误页面内容等多维度信息,构建出独一无二的“指纹”。这个“指纹”就像人的DNA一样,能够独特...

    HTML5指纹识别方法

    HTML5指纹识别是一种在线身份验证和用户行为追踪的技术,它利用现代浏览器提供的各种特性来创建一个独特的设备或用户标识。这种标识,被称为“浏览器指纹”,能够帮助网站区分不同的访问者,即使他们使用了相同的...

    微软研发用户追踪新技术欲取代cookie.docx

    ### 微软研发用户追踪新技术欲取代Cookie 随着数字化时代的快速发展,互联网技术也在不断进步,以适应更加个性化和隐私保护的需求。在这个背景下,微软正在研发一项全新的用户追踪技术,旨在取代传统的Cookie技术。...

    Web客户端追踪—浏览器指纹追踪

    浏览器指纹追踪技术是一种能够通过收集和分析用户浏览器的各种信息,以实现对用户网络行为和隐私数据的追踪和分析的方法。这种技术类似于人类的生物识别系统,通过特定的浏览器特征来识别不同的客户端。 一、基本...

    AOL和微软使用指纹识别技术 提高广告追踪效率

    不同于传统的基于cookie的追踪方式,设备指纹识别技术追踪的是设备而非浏览器cookie,这意味着即使用户清除了cookie,设备指纹信息仍然存在,从而为广告商提供了更为稳定和长期的追踪手段。 指纹识别技术的主要应用...

    cookie分析工具

    2. **性能监控**:Cookie数据可以帮助识别网站性能问题,例如加载速度慢或用户流失率高的页面。 3. **数据分析**:分析Cookie数据有助于进行用户行为分析,为市场营销策略提供数据支持。 **总结** Cookie分析工具...

    客户端追踪标识客户端设备指纹追踪用户

    总的来说,客户端追踪和设备指纹技术是现代互联网服务不可或缺的一部分,它们既带来了便利也带来了挑战。开发者需要平衡功能性和隐私性,以确保服务的质量和用户的权益。同时,了解和掌握这类技术对于IT专业人士来说...

    cookie-2.0::cookie::man_light_skin_tone::laptop:

    cookie-2.0 :cookie: :cookie: :cookie: :cookie: :cookie: :cookie: :cookie: :cookie: :cookie:

    C# cefsharp 多账号同时登陆,设置cookie隔离,修改部分浏览器指纹

    浏览器指纹是网站用来识别独特用户的标志,包括浏览器版本、分辨率、插件信息等。为了提高匿名性,我们可能需要改变一些浏览器指纹的组成部分。CEFSharp虽然没有直接提供修改指纹的API,但可以通过JavaScript注入...

    browser-cookie 获取浏览器cookie

    - 确保在使用`browser_cookie3`之前已在相应的浏览器中登录目标网站。 - 需要注意的是,这种方法可能会带来安全风险,因为脚本可以直接访问用户的敏感信息。 #### 三、技术细节 1. **Cookies加载机制**: - `...

    Cookie浏览器

    - 隐私泄露:过多的Cookie可能会追踪用户行为,影响个人隐私,因此用户应合理设置Cookie的保留时间。 5. **如何使用Cookie浏览器** - 设置和管理:用户可以使用Cookie浏览器导入已有的Cookie文件,或者手动添加新...

    区别每台电脑和浏览器的帆布值

    总结来说,帆布指纹是Web开发中的一个重要工具,用于识别和追踪用户设备,提高网站流量统计的准确性。但它同时也带来了隐私问题,需要开发者在平衡用户体验和隐私保护之间找到合适的解决方案。通过阅读提供的资料和...

    Java Scrip环境中网络课程开发之cookie技术应用研究.pdf

    2. JavaScript环境中的cookie技术应用:在JavaScript环境中,cookie技术可以用于存储学习者的学习痕迹、追踪学习者的行为、提高学习效率等方面。JavaScript可以通过document对象中的cookie属性来存取cookie。 3. ...

    PHP的Cookie技术介绍

    - 示例:`Set-Cookie: login=MichaelJordan; path=/; domain=msn.com; expires=Monday, 01-Mar-99 00:00:01 GMT` 2. **发送Cookie**:客户端在后续请求相同域名下的资源时,会在HTTP请求头中包含`Cookie`字段,将...

    web技术之cookie讲解

    在Web开发中,Cookie是一种非常重要的技术,它用于在客户端和服务器之间存储和传递信息。本文将深入探讨Cookie的基本概念、工作原理、用途以及在Java中的实现。 首先,Cookie是由服务器端发送到用户浏览器并存储在...

    查看cookie工具

    当用户再次访问同一网站时,浏览器会将Cookie发送回服务器,帮助网站识别用户,提供个性化的浏览体验。Cookie分为Session Cookie和Persistent Cookie,前者在浏览器关闭后即失效,后者则有预设的过期时间。 **2. ...

Global site tag (gtag.js) - Google Analytics