浏览器指纹定义
指纹,即我们常说的指纹,比如手指的纹理,每个人的指纹都是唯一的,所以我们可以用指纹识别器记录用户指纹来唯一判别和认证一个用户。在网络安全领域也会听到一些“指纹”的说法,比如,操作系统指纹,网络设备指纹等等。“唯一性”和“稳定性”奠定了指纹识别作为一种新型且可靠的追踪方式的基础。
1、提出
浏览器指纹,是EFF(电子前哨基金会)提出的一项追踪技术。浏览器指纹技术可以匿名识别浏览器,并且准确率高达94%。EFF通过提取浏览器中的8个独立的特征属性,使用字符串进行描述,{ user_agent, plugins, fonts, video, supercookies, http accept, timezone, cookie enabled },有些浏览器特征可以通过简单的HTTP请求获得,有些则需要通过AJAX来收集。
每项浏览器特征都携带不同bit的信息熵,提取的八项浏览器特征共包含18.1 bits的信息熵,这意味着在286,777个指纹中才会出现一个与你的浏览器相同的浏览器指纹。EFF使用Murmur Hash算法对这些信息进行哈希计算并返回一个32位字符串,这个字符串即唯一的浏览器指纹。如图所示:
2、发展
GitHub上一位用户根据EFF发表的文章,用JavaScript实现了快速的浏览器指纹库——Fingerprintjs,并且之后对该库再一次做了些改进,形成了Fingerprintjs2。作者在改进的Fingerprintjs2库中添加了一些对新型特征的检测以及新型的识别技术。
新型的识别技术有:
Canvas:HTML5的动态绘图标签,也是Fingerprintjs2中添加的新型追踪技术。由于不同的浏览器使用不同的图像处理引擎,不同的导数选项,不同的压缩等级,所以不同的电脑绘制出的图形也会有不同,而这些不同可以被用来给用户设备分配特定编号,即指纹。Canvas的toDataURL()方法返回的是图片内容的base64位编码字符串,其最后的32位CRC校验码可以用于用户的唯一标识。EFF的浏览器指纹测试中没有截取最后的校验码,而是对获取到的所有base64位编码hash运算压缩成32位的字符串,即浏览器指纹检测中的Hash of canvas fingerprint(如上图所示)。
WebGL:一种3D绘图标准,对获取到的浏览器的WebGL功能测试结果,通过hash运算生成32位字节码,即Hash of WebGL fingerprint。
3、跟进
随后,EFF在其官方检测网站中也使用 Fingerprintjs2作为指纹信息收集模块(在线浏览器指纹监测网址:https://panopticlick.eff.org/ )。下面将详细介绍除了新型的识别技术以外的浏览器指纹收集工作是怎么展开的。
浏览器指纹信息
以下是一些指纹特征信息的简单示例,以及这些特征的获取方式:
1、基本属性
User Agent:指用户代理,即浏览器,包括硬件平台,系统软件,应用软件和用户个人偏好等信息。User Agent是浏览器navigator对象的一个属性,可通过navigator.userAgent获取浏览器信息。根据User Agent信息可以判断用户所使用的浏览器及版本等信息,不同的浏览器的信息也有很大的不同,如下图:
Platform:代表用户使用的浏览器所在的平台,可通过navigator.platform获取。
Language:代表浏览器当前使用的语言。可通过navigator.language获取。
Screen Size:即浏览器分辨率,屏幕分辨率可由screen.width(屏幕的宽)以及screen,height(屏幕的高)组合得到。同理,Color Depth是浏览器的色彩深度,可由screen.colorDepth属性获取到。
Time Zone:JavaScript的Data对象的getTimezoneOffset() 函数用于返回协调通用时间(UTC)与当前主机时间之间的分钟差值。
2、检测类属性
Are Cookie Enabled? :浏览网站为用户设置Cookie,通过返回的Cookie值可以判断用户是否禁用Cookie。
DNT header Enabled?:检测用户浏览器是否设置“禁止追踪”(Do Not Track)来避免被第三方网站追踪网络痕迹。navigator.doNotTrack的值代表着用户对浏览器的不同设置。
Limited supercookie test : 通过HTML5的localStorage和sessionStorage属性检测浏览器是否支持本地存储。IE的userData对象可以检测是否在浏览器客户端设置了永久性的会话数据。
Touch Support:对触屏功能进行检测,通过检测navigator.maxTouchPoints以及TouchEvent对象和ontouchstart事件,综合判断浏览器是否支持触屏操作,判断浏览器终端是PC端或是移动端。
Browser Plugin Details:使用ActiveXObject对象对IE浏览器的插件进行检测,对非IE浏览器通过navigator.plugins属性获取浏览器的插件列表。
System fonts:通过检测Flash的window.swfobje和swfobject.hasFlashPlayerVersion()等属性和方法来检测字体。如果浏览器不支持Flash,则使用JS对字体进行枚举检测。
展望
当然浏览器指纹也存在自身的弊端,用户浏览器特征信息的变化都会造成指纹的改变。比如浏览器的升级以及插件的安装。同一用户浏览器指纹的不一致是与Cookie相比之下的缺陷,即“稳定性”不够好。EFF在其网站测试中对每一个浏览的用户设定一个Cookie值,用于辅助检测。除了设定Cookie作为用户标识之外,最近几年的一些研究一直在探寻能够有效关联同一用户的不同阶段的指纹值的方法,浏览器指纹取代Cookie或许指日可待。
联系我们下载防关联系统:17602399866(同微) 2322004545
网站下载: