基于HTML Canvas实现“指纹识别”技术

作者:zhanhailiang 日期:2015-01-31

说明

所谓指纹识别是指为每个设备标识唯一标识符(以下简称UUID)。诸如移动原生的APP都可以通过调用相关设备API来获取相应的UUID。但是浏览器内WebAPP受限于运行环境无法直接防部设备API,此时需要通过其它方法来设置UUID。

基于持久化Cookie生成UUID

原理

当用户访问一个网站时,网站可以在用户当前的浏览器Cookie中种入含有UUID的Cookie,并通过这个信息将用户所有行为(浏览了哪些页面?搜索了哪些关键字?对什么感兴趣?点了哪些按钮?用了哪些功能?看了哪些商品?把哪些放入了购物车等等)关联起来。

实现

function rand(len) {
    var hex = "0123456789abcdef",
        str = "",
        index = 0;
    for (len = len || 32; len > index; index++) {
        str += hex.charAt(Math.ceil(1e8 * Math.random()) % hex.length);
    }
    return str;
}

var uuid = (new Date).getTime() + "_" + rand();

// 写持久化cookie,两年后过期
// setcookie(‘uuid‘, uuid, 732 * 24 * 60 * 60);

弊端

之后就可以使用UUID来实现用户追踪技术,方便后续的数据分析工作。

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

基于HTML Canvas实现“指纹识别”技术

原理

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

测试结果表明,同一浏览器访问该域时生成的CRC校验码总是不变。可以简单理解为同样的HTML Canvas元素绘制操作,在不同的操作系统不同的浏览器上,产生的图片内容其实是不完全相同的。出现这种情况可能是有几个原因:

  1. 在图片格式上,不同web浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等。
  2. 在像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。
  3. 即使是相同的绘图操作,最终产生的图片数据在hash层面上依然是不同的。

实现

function bin2hex(s) {
  //  discuss at: http://phpjs.org/functions/bin2hex/
  // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  // bugfixed by: Onno Marsman
  // bugfixed by: Linuxworld
  // improved by: ntoniazzi (http://phpjs.org/functions/bin2hex:361#comment_177616)
  //   example 1: bin2hex(‘Kev‘);
  //   returns 1: ‘4b6576‘
  //   example 2: bin2hex(String.fromCharCode(0x00));
  //   returns 2: ‘00‘

  var i, l, o = ‘‘,
    n;

  s += ‘‘;

  for (i = 0, l = s.length; i < l; i++) {
    n = s.charCodeAt(i)
      .toString(16);
    o += n.length < 2 ? ‘0‘ + n : n;
  }

  return o;
}

function getUUID(domain) {
    var canvas = document.createElement(‘canvas‘);
    var ctx = canvas.getContext("2d");
    var txt = domain;
    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);

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

console.log(getUUID("http://m.vip.com/"));

优点

基于HTML Canvas生成的UUID可以有效的用于用户追踪技术,目前并没有有效的对抗方案。

更多阅读

  1. Client-Side:HTML5 Canvas Fingerprinting
  2. 取代cookie的网站追踪技术:“帆布指纹识别”初探
  3. JavaScript bin2hex function
  4. 现有IOS设备唯一标示符的方案比较
  5. Is there a unique Android device ID?
时间: 2024-12-29 11:27:01

基于HTML Canvas实现“指纹识别”技术的相关文章

指纹识别技术需要遵循的2点原则

手机指纹识别技术应该遵循的2点原则: 第一,指纹扫描必须只基于硬件,不可通过软件激活,或是将指纹信息传送给软件.如果该装置能够被软件激活,则无法避免被恶意代码攻击的风险.而基于硬件的实现仅会通知软件"指纹验证通过"或"指纹验证失败",但不会与软件分享任何指纹相关的数据与信息. 第二,在本地存储的指纹信息,其存储位置必须非常安全,这个位置必须禁止软件的访问,否则黑客会通过破解软件的方式来获取指纹信息.Shuman Ghosemajumder提到的2点原则应该成为所有指

工控系统的指纹识别技术

转载:灯塔实验室 当前,指纹识别技术已被或坏或好的广泛应用于ICT(信息和通信技术)系统.攻击者通过扫描网络获取设备指纹来关联漏洞入侵系统,安全防护者则利用设备指纹来发现系统的脆弱性,检测系统的网络异常.在工业控制系统(ICS)中,指纹识别技术亦用于发现ICS系统脆弱性,检测攻击行为等方向.本文主要关注工控安全领域指纹识别技术. 指纹识别是什么 在ICT领域里,指纹识别是利用不同信息描述运行于网络中的设备或者软件的一种技术.我们了解最多的是设备指纹,被用来远程识别设备的硬件,操作系统,运行软件(

生物特征识别:指纹识别技术应用

指纹识别是一项古老的技术,早在公元前N多年古中国人就已经意识到指纹的唯一性,并在一定程度上应用.19世纪人们开始对指纹的更进一步的研究,并得出了两个重要结论. (一),没有任何两个手指的指纹纹线形态是一致的. (二),指纹纹线的形态是终生不变的. 这两个重要的结论的引用使得一些国家和机构作为辨识的根据,例如鉴定犯罪嫌疑人等.上世纪80年代后,计算机技术的发展和光学传感器的进步,使得指纹识别技术得到更广阔的空间,随着传感器技术和相应软件算法的发展,指纹识别技术进一步得到普及. 现代指纹识别技术是通

高考替考事件为指纹识别技术敲响警钟

指纹识别技术存在严重安全漏洞 河南高考替考案中暴露出来的指纹膜以假乱真,也让反作弊问题浮出水面.指纹识别认证受环境温度和个人皮肤条件影响较大等原因,部分考生指纹不易 采集,且市场上又出现了大量复制指纹的产品,给通过指纹验证考生身份造成困扰.而现实中,用印泥盗取他人指纹的情形更是屡屡发生. 上述种种危险传递出一个信号:技术已趋成熟且获广泛应用的指纹识别技术,仍存在其自身难以克服的安全漏洞.由于指纹裸露于体表,无法避免被复制及窃取,急需更加安全且同样便捷的身份识别和安防技术. 现在不少公司都装配了指

通信辐射源指纹识别技术

摘要 通信辐射源个体识别是近来通信对抗领域的重要研究课题,不同于传统通信信号侦察中的调制模式识别研究,通信辐射源识别主要研究体现同类辐射源之间个体差异的信号指纹的分析提取技术.文中研究分析信号指纹的分析提取存在的技术难点和解决方案.对稳态通信信号的个体细微特征,如通信发射信号在载频和调制参数特征上的偏差,以及信号杂散输出成分的差异,并考虑将上述特征确立为反映通信电台个体技术特点的信号指纹,提出一个基于证据理论的通信辐射源识别方案,是实现个体识别在军事通信对抗作战计划的重要依据.关键词 通信辐射源

基于ARM9的指纹识别系统的设计和实现

生物识别技术是利用人体固有的生理特性(如指纹.脸象.红膜等)和行为特征(如笔迹.声音.步态等)来进行个人身份的鉴定. 生物识别技术比传统的身份鉴定方法更具安全.保密和方便性.生物特征识别技术具有不易遗忘.防伪性能好.不易伪造或被盗.随身"携带"和随时随地可用等优点. 生物识别的工作原理是利用生物识别设备对生物特征进行取样,提取其唯一的特征并将其转化成数字代码,并进一步将这些代码组成特征模板,人们同识别设备交互进行身份认证时,识别设备获取其特征并与数据库中的特征模板进行比对,以确定是否匹

基于ATMEGA32的指纹识别防盗门锁的设计

0 前言 人体生物特征是人体所固有的生理特征与行为特征,如指纹.掌纹.面像.眼虹膜.视网膜.声音.签字.步态等.这些特征具有随身性,因而使用方便,不易遗忘或丢失:人体的生物特征与人体又是唯一绑定的,且具有人人不同的唯一性,因而防伪性好,不易伪造或被盗.所以,用人体生物特征来代替传统的以物识人的方法来鉴定个人的身份是一种认人不认物的直接验证方法,显然是最为安全可靠的,这也是现代社会发展的需要. 随着光电等科学技术的发展,人体生物特征识别这一实用性很强的高新技术也获得很大的发展与应用.其中以指纹识别

基于ARM的指纹识别门禁系统设计方案

现代社会高速发展,很多场合需要身份确认,传统的身份识别技术已经不能满足社会要求.人的身体特征具有不可复制性,因此人们开始研究生物识别技术,而指纹具有唯一性.终生不变性.难于伪造等特点,安全性高,因而得到了广泛应用.在一些机要部门,如银行.宾馆.机房等一般都安装有门禁系统,门禁系统是为保障人们生活.工作及财产安全, 对重要通道的出入口进行管理与控制的系统,基于指纹识别技术的门禁系统是一项高科技安全设施,提高了系统的安全性.ARM作为一种嵌入式系统处理器,具有高性能.低功耗.低成本等特点,因而在工业

用于身份验证的生物识别技术指纹识别相关情况解析方案

众多的用于身份验证的生物识别技术中,指纹识别技术是目前最方便.可靠.非侵害和价格便宜的解决方案. 指纹是人体独一无二的特征,具有随身性.唯一性.不可复制性.绝对保密性,并且它们的复杂度足以提供用于鉴别的足够特征;如果我们想要增加可靠性,我们只需登记更多的指纹,鉴别更多的手指.爱迪尔研制的指纹模块性能卓越,扫描指纹的速度很快,使用非常方便;读取指纹时,用户只需将活体手指与指纹采集头相互接触,与指纹采集头直接接触是读取人体生物特征最可靠的方法. 二.门禁锁具 在日常生活中,人们无处不在的必须使用各种