帆布指纹识别(canvas fingerprinting)
廣告聯(lián)盟或許網(wǎng)站運(yùn)營(yíng)者都希望能夠精準(zhǔn)定位并標(biāo)識(shí)每一個(gè)個(gè)體,通過(guò)對(duì)用戶行為的分析(瀏覽了哪些頁(yè)面?搜索了哪些關(guān)鍵字?對(duì)什么感興趣?點(diǎn)了哪些按鈕?用了哪些功能?看了哪些商品?把哪些放入了購(gòu)物車等等),為用戶推送更加精準(zhǔn)的廣告(精準(zhǔn)化營(yíng)銷)。同時(shí),通過(guò)對(duì)用戶的標(biāo)識(shí),可以將不同站點(diǎn)的用戶進(jìn)行關(guān)聯(lián)。
在過(guò)去,實(shí)現(xiàn)上述cookie是最受歡迎的一種。但由于移動(dòng)互聯(lián)網(wǎng)的發(fā)展,移動(dòng)設(shè)備限制、用戶禁用cookie。使得cookie愈來(lái)愈不受待見(jiàn)。伴隨著html5的成熟,通過(guò)canvas fingerprinting技術(shù)標(biāo)識(shí)一個(gè)唯一的瀏覽器逐漸被接受。它的特點(diǎn)是不通過(guò)cookie,用戶基本無(wú)法屏蔽它 。
其實(shí)現(xiàn)原理:
1 var canvas = document.createElement('canvas'); 2 var ctx = canvas.getContext('2d'); 3 var txt = 'http://security.tencent.com/'; 4 ctx.textBaseline = "top"; 5 ctx.font = "14px 'Arial'"; 6 ctx.textBaseline = "tencent"; 7 ctx.fillStyle = "#f60"; 8 ctx.fillRect(125,1,62,20); 9 ctx.fillStyle = "#069"; 10 ctx.fillText(txt, 2, 15); 11 ctx.fillStyle = "rgba(102, 204, 0, 0.7)"; 12 ctx.fillText(txt, 4, 17);獲取繪畫的內(nèi)容,需要使用到canvas.toDataURL()方法,該方法返回的是圖片內(nèi)容的base64編碼字符串。對(duì)于PNG文件格式,以塊(chunk)劃分,最后一塊是一段32位的CRC校驗(yàn),提取這段CRC校驗(yàn)碼便可以用于用戶的唯一標(biāo)識(shí)
1 var b64 = canvas.toDataURL().replace("data:image/png;base64,",""); 2 var bin = atob(b64); 3 var crc = bin2hex(bin.slice(-16,-12)); 4 console.log(crc);通過(guò)驗(yàn)證,crc在一定程度上標(biāo)識(shí)了瀏覽器的唯一性,但是,在相同設(shè)備,相同瀏覽器上,重復(fù)特別嚴(yán)重。國(guó)外有一個(gè)經(jīng)過(guò)優(yōu)化后的表示瀏覽器的唯一性的js,https://github.com/Valve/fingerprintJS
它除了利用canvas以外,還加入了其它的影響因素,這些因素包括
?
官網(wǎng)數(shù)據(jù)顯示,該標(biāo)識(shí)精準(zhǔn)度達(dá)94%,基于原理?https://panopticlick.eff.org/browser-uniqueness.pdf
國(guó)內(nèi)一程序員在此基礎(chǔ)上做了 測(cè)試,測(cè)試結(jié)果https://docs.zoho.com/sheet/ropen.do?rid=08m2ga1cf6790c0eb4d8c8f7e54ca6ddb9b72
?
| 表格 1 | |||||||||||||
| 手機(jī)型號(hào) | 系統(tǒng) | Android原生 or Safari | uc瀏覽器 | qq瀏覽器 | 微信瀏覽器 | 備注 | |||||||
| ? | ? | 算法優(yōu)化過(guò)的fingerprint | 簡(jiǎn)單的示例代碼 | 算法優(yōu)化過(guò)的fingerprint | 簡(jiǎn)單的示例代碼 | 版本 | 算法優(yōu)化過(guò)的fingerprint | 簡(jiǎn)單的示例代碼 | 版本 | 算法優(yōu)化過(guò)的fingerprint | 簡(jiǎn)單的示例代碼 | 版本 | ? |
| SonyEricsson LT15i | Android 2.3.4 | 3069863566 | 390fde4f | 1317560509 | 9ce51412 | v9.9.0.459 | 2177181476 | 3ea97fca | v5.2 | ? | ? | ? | ? |
| Sony X10i | Android 2.3.3 | 3113311216 | js出錯(cuò) | 2637631051 | 9ce51412 | v9.9.0.459 | 2131234727 | 3ea97fca | v5.2 | 2678610518 | js出錯(cuò) | v5.3.1 | 原生的刷新優(yōu)化過(guò)生成的id不會(huì)變化 |
| 摩托羅拉 MB526 | Android 2.3.6 | 2364220961 | js出錯(cuò) | - | - | - | - | - | - | - | - | - | 無(wú)sd卡無(wú)法安裝瀏覽器應(yīng)用程序 |
| 華為 u9508 | Android 4.0.4 | 3905553191 | 7e41cc0f | 4273392099 | b699d48c | v9.9.0.459 | 1587050929 | 78de4112 | v5.2.0.870 | 4026915635 | 7e41cc0f | v5.3.1 | ? |
| OPPO X907 | Android 4.0.3 | 726684502 | 7e41cc0f | 2089481481 | d07a1ee9 | v9.9.0.459 | 3231943450 | 78de4112 | v5.2 | 888269767 | 7e41cc0f | v5.3.1 | ? |
| htc t528w | Android 4.1.1 | 319655688 | a6cb1bf9 | 2479004385 | 56d50248 | v9.8 | 356698439 | 244ae093 | v5.2.1.880 | 2025279959 | a6cb1bf9 | v5.3.1 | ? |
| 2307781626 | d07a1ee9 | v9.9.0.459 | |||||||||||
| 紅米移動(dòng)版 | Android 4.2.1 | 2391689733 | 9c6ad73c | ? | ? | ? | 1950263795 | 244ae093 | v5.2.1.880 | 1813996467 | 244ae093 | v5.4beta | ? |
| HUAWEI A199 | Android 4.1.2 | 786613426 | 9c6ad73c | 1568290891 | 00000000 | v8.7.2 | 3315869337 | c1e8ddab | v4.2 | 3514548781 | 9c6ad73c | v5.3.1 | UCv8.7.2不支持canvas,每次刷新優(yōu)化后生成的id會(huì)變化,示例代碼生成id一直是8個(gè)0 |
| 1118832592 | b699d48c | v9.9.0.459 | 1980938942 | 244ae093 | v5.2 | ||||||||
| HUAWEI P6-T00 | Android 4.2.2 | 2890925815 | 9c6ad73c | 452391340 | b699d48c | v9.9.0.459 | 3877925850 | 244ae093 | v5.2 | 3836773909 | 9c6ad73c | v5.3.1 | ? |
| 魅族 M353 | Android 4.2.1 | 1914110408 | 9c6ad73c | 3750243844 | 431d50f8 | v9.9.0.459 | 3750421827 | 244ae093 | v5.2 | 1096133187 | 9c6ad73c | v5.3.0 | ? |
| 482295408 | 9c6ad73c | v5.3.1 | ? | ||||||||||
| HTC 802w | Android 4.2.2 | 2657761243 | 9c6ad73c | 2182659327 | dedbb2de | v9.8.0.435 | 2352114048 | 244ae093 | v5.2 | 1328536463 | 9c6ad73c | v4.5 | ? |
| 2206482289 | 2bc8041a | v9.9.0.459 | 172064929 | 9c6ad73c | v5.3.1 | ? | |||||||
| 紅米 noet | Android 4.2.2 | 398161035 | 9c6ad73c | 197430937 | d07a1ee9 | v9.8.9.457 | 860144104 | 9c6ad73c | v5.0 | 2695087349 | 9c6ad73c | v5.3.1 | ? |
| 三星 GT-N7100 | Android 4.2.2 | 3229417935 | 9c6ad73c | 755839663 | 9fb1a593 | v9.8.9.457 | 1643973998 | b31ee991 | v5.2 | 2036662041 | 9c6ad73c | v5.1 | ? |
| 854278007 | 9c6ad73c | v5.3.1 | ? | ||||||||||
| Lenovo K900 | Android 4.2.1 | 1758074907 | 9c6ad73c | ? | ? | ? | ? | ? | ? | 3465119114 | 9c6ad73c | v5.3.1 | ? |
| 三星 galaxy s5 | Android 4.4.2 | 498065608 | 29725ab4 | 749934522 | d2a60b1d | v9.8.9.457 | 2294751620 | cd456c4a | v5.2.1.880 | 1887934795 | 8140f6e0 | v5.2 | ? |
| 3807187249 | 8140f6e0 | v5.3.1 | |||||||||||
| 三星 GT-I9505 | Android 4.3 | 118099825 | 4f8f416c | 1898858301 | 4228c48e | v9.9.0.459 | 2205938319 | a3ee5a29 | v5.2 | 4256482719 | fbf76091 | v5.3.1 | ? |
| 三星 note3 | Android 4.3 | 3923466876 | 4f8f416c | 1961962933 | 0482a2ac | 靈動(dòng)版 | 408784441 | 0482a2ac | v5.0.2.710 | 4221776986 | 0482a2ac | v5.3.1 | ? |
| 4023807084 | 4546f3bb | v9.8.0.435 | ? | ||||||||||
| vivo x3t | Android 4.2.1 | 2341248451 | da5b08ce | 1512563799 | c36972ca | v9.9.0.459 | 3677055007 | 33834835 | v5.1.0.780 | 3748495542 | da5b08ce | v5.2.1 | 原生瀏覽器版本v2.3.1 |
| 2341248451 | da5b08ce | 2080629171 | 33834835 | v5.2.1.880 | 293292691 | da5b08ce | v5.3.1 | 原生瀏覽器版本v2.3.3 | |||||
| vivo X1 | Android 4.1.1 | 752680764 | da5b08ce | 4192034694 | c36972ca | v9.9.0.459 | 4029696985 | 33834835 | v5.2 | 1912866602 | da5b08ce | v5.3.1 | ? |
| 三星 GT-I9502 | Android 4.2.2 | 3824555000 | d457e86b | 4271101143 | 53288053 | v9.7.9439 | 958189852 | 31dbc3dd | v5.0.0.650 | 3721105672 | 759549f9 | v4.5.1 | ? |
| 861119218 | 09ca4266 | v9.9.0.459 | 442109150 | 759549f9 | v5.3.1 | ? | |||||||
| LG nexus5 | Android 4.3 | 1934848714 | 91aedadb | 2787277112 | a0d15a90 | v9.9.0.459 | 2462651612 | 91aedadb | v5.2.1.880 | 3690133431 | 91aedadb | v5.3.1 | ? |
| 三星 GT-S7562 | Android 4.0.4 | 2614919294 | 0d5b2b4b | 436079966 | 0b27d3d8 | v9.7.5.418 | 35268090 | b437c248 | v5.2 | 1659108745 | 0d5b2b4b | v5.3.1 | ? |
| 502410648 | d155acfa | v9.8.9.457 | ? | ||||||||||
| Huawei P1 U9200 | Android 4.0.3 | 3177416712 | 2d694a48 | 4051711183 | 56d50248 | v9.6.0.378 | 4124042100 | fa189661 | v4.5 | 1601581701 | 7e41cc0f | v5.3.1 | ? |
| 3743446141 | d07a1ee9 | v9.8.9.457 | ? | ||||||||||
| Nokia X | Android 4.1.2 | 3598202588 | 7ba05ba8 | 765903625 | 859aa2b8 | v9.9.0.459 | 3070076558 | 418420bf | v5.2 | 2591054263 | bee57099 | v5.0.3 | ? |
| 1779200183 | bee57099 | v5.3.1 | ? | ||||||||||
| iphone 3GS | iOS 6.0 | 2754182167 | 9fcce736 | 2426993793 | 9fcce736 | v9.7.1.450 | 4019179322 | 9fcce736 | v4.3 | 3034320187 | 9fcce736 | v5.3.1 | ? |
| touch 4 | iOS 6.0.1 | 1326709631 | 9fcce736 | ? | ? | ? | 2614633304 | 9fcce736 | v4.5 | 3107294191 | 9fcce736 | v5.3.1 | ? |
| iphone5s | iOS 7.1.2 | 3595104389 | 03048452 | 913535178 | 03048452 | v9.8.0.451 | ? | ? | ? | 2722128024 | 03048452 | v5.3.1 | ? |
| ipad 2 | iOS 7.0.4 | 128750767 | 03048452 | 379240706 | 03048452 | v2.4.2.414 | 3271622238 | 03048452 | v4.2.1 | ? | ? | ? | ? |
| iphone 4S | iOS 7.0.6 | 2862380899 | 9fd0577f | 2558051848 | 9fd0577f | v9.7.5.438 | 3620524272 | 9fd0577f | v5.2.1 | 2859315108 | 9fd0577f | v5.3.1 | ? |
| touch 5G | iOS 7.1.1 | 2702325906 | 9fd0577f | 3772802722 | 9fd0577f | v9.8.0.451 | 2970288195 | 9fd0577f | v5.2.1 | 495467843 | 9fd0577f | v5.3.1 | ? |
| iphone 5c | iOS 8.0 | 1300849469 | 9fd0577f | 2561622031 | 9fd0577f | v9.8.0.451 | 3288966699 | 9fd0577f | v5.2.1 | 3767977964 | 9fd0577f | v5.3.1 | ? |
| ? | 備注說(shuō)明 | 有特殊背景色的單元格說(shuō)明有重復(fù),同背景色同字體顏色的,是相同的數(shù)據(jù) | |||||||||||
其測(cè)試結(jié)論?
1.由于涉及設(shè)備以及瀏覽器的判定因素非常多,重復(fù)性很低,31臺(tái)設(shè)備皆無(wú)重復(fù)
但是可以設(shè)想,畢竟是通過(guò)各種屬性值去判斷唯一性,理想情況下如果兩臺(tái)設(shè)備相同瀏覽器各種設(shè)置也相同,還是會(huì)出現(xiàn)重復(fù)
2.也正因?yàn)樯婕暗囊蛩囟?#xff0c;一旦設(shè)備系統(tǒng)更新 or 瀏覽器版本更新 or 瀏覽器關(guān)鍵插件有變化(版本更新 or 新增卸載關(guān)鍵插件) ,生成的ID都會(huì)改變,由于瀏覽器版本更新還是比較頻繁的,很容易失去之前跟蹤的用戶
結(jié)論:canvas指紋只能作為一參考屬性去判斷設(shè)備的唯一性,不能只用這一個(gè)因素來(lái)判定設(shè)備唯一性。fingerPrint.js也不能取代cookie,但是可以作為輔助,如果用戶清除了cookie的情況下,還可以通過(guò)fingerPrint.js跟蹤到該用戶重新set cookie(結(jié)論參考)
?
在一些場(chǎng)景下:
一般一個(gè)指紋跟蹤不是永久的跟蹤的概念,而是在一個(gè)戰(zhàn)役內(nèi)進(jìn)行活動(dòng)的跟蹤,比如可以發(fā)布3個(gè)活動(dòng),3個(gè)活動(dòng)分別是掃二維碼打開(kāi)一個(gè)網(wǎng)址,在另外一個(gè)網(wǎng)頁(yè)內(nèi)操作,在第三個(gè)網(wǎng)頁(yè)內(nèi)進(jìn)行別的操作,然后被采集后在后臺(tái)通過(guò)指紋進(jìn)行關(guān)聯(lián),得到本次戰(zhàn)役的目標(biāo)中間可以通過(guò)搞一個(gè)抽獎(jiǎng),要用戶輸入手機(jī)號(hào)碼驗(yàn)證后抽獎(jiǎng),來(lái)做一些連接。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xiezhengcai/p/4252008.html
總結(jié)
以上是生活随笔為你收集整理的帆布指纹识别(canvas fingerprinting)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMware虚拟机 网桥模式详细配置(及
- 下一篇: 微软的TTS