指紋是一個(gè)人的身份信息,在網(wǎng)絡(luò)上你通過瀏覽器訪問網(wǎng)站五辽,也會(huì)在網(wǎng)站留下自己的信息。有的人會(huì)覺得自己沒有登錄賬號(hào)厕隧,網(wǎng)站就不知道自己是誰奔脐。其實(shí)真有很多種方法知道你是誰。最簡單的就是記錄下你的ip地址吁讨。ip地址就含有足夠多的信息髓迎。其實(shí)關(guān)鍵還是因?yàn)閕p是穩(wěn)定的,可以通過關(guān)聯(lián)分析建丧、交叉分析確定你的身份排龄。那可以想一下,除了ip還有其他穩(wěn)定的信息嗎翎朱?其實(shí)有的橄维,例如你的上網(wǎng)習(xí)慣,只要有足夠多的數(shù)據(jù)拴曲,足以分析出來是否是你争舞。這些信息是潛在的而且不容易察覺的。但是這篇文章主要想講一個(gè)是澈灼,瀏覽器指紋竞川,偏向技術(shù)類的文章店溢。ip你有很多方式可以更換,但是只要你不是每次訪問這個(gè)網(wǎng)站就換一個(gè)瀏覽器委乌,而且也沒這么多瀏覽器給你換床牧,所以瀏覽器指紋可以算是一個(gè)穩(wěn)定的特征。
有些人把瀏覽器指紋分為1代遭贸、2代戈咳、2.5代,我是不太習(xí)慣這種說法壕吹,因?yàn)槿绻创^(qū)分的話著蛙,應(yīng)該是相互替代的關(guān)系的,但是其實(shí)它們是可以共用的算利。
最簡化版本的瀏覽器指紋就是cookie册踩,就是網(wǎng)站可以設(shè)置一個(gè)文件在你的瀏覽器上,并且可以讀取到它效拭,也就是說即使你換了ip暂吉,只要有cookie在,你就能被認(rèn)出來缎患。但是cookie是可以清除的慕的,或者使用無痕模式,退出后輕松清除cookie挤渔。
在HTTP協(xié)議中肮街,header包含了客戶端信息,內(nèi)容如下
{
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Host": "httpbin.org",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"
}
}
解析一下這header頭的內(nèi)容:
Accept:客戶端可以接受的內(nèi)容判导,常見的html文件嫉父、圖片等。
Accept-Encoding : 客戶端可以接受的壓縮編碼類型眼刃。
Accept-Language :客戶端語言绕辖,其中q=0.9的意思是客戶端偏向的語言,越大表示客戶端越希望獲得的語言擂红。
Host:請求的域名仪际。
Sec-Fetch-Mode、Sec-Fetch-Site昵骤、Sec-Fetch-User這三個(gè)是chrome特有的树碱,所以當(dāng)出現(xiàn)了這三個(gè)的時(shí)候就可以知道客戶端為chrome瀏覽器。Sec-Fetch-Mode標(biāo)識(shí)訪問類型变秦,例如navigate表示自然訪問成榜,Sec-Fetch-Site標(biāo)識(shí)來源網(wǎng)站,可以知道是同源還是跨域蹦玫,Sec-Fetch-User標(biāo)識(shí)請求是否來自互動(dòng)赎婚,例如點(diǎn)擊了按鈕雨饺。如果是通過機(jī)器發(fā)出的請求,這個(gè)參數(shù)就是false惑淳,也就是0,則可以判斷是否是機(jī)器惡意請求饺窿。
Upgrade-Insecure-Requests :標(biāo)識(shí)客戶端樂于接受并且可以處理安全鏈接(https)歧焦;
User-Agent:這個(gè)是最為豐富的信息了,包含客戶端類型肚医、系統(tǒng)平臺(tái)绢馍、軟件版本等信息。通過這條信息可以用來處理例如區(qū)分各個(gè)瀏覽器肠套、系統(tǒng)的訪客舰涌。通過這條可以模糊的判斷身份。但是這個(gè)信息卻是可以隨便偽造和篡改的你稚。所以也不可信瓷耙。
那難道沒有牢靠的方法鎖定你的身份了嗎?當(dāng)然是有刁赖,這表主要介紹一種最簡單有效的方法——canvas指紋搁痛。任何普通開發(fā)者都可以掌握。
canvas指紋的原理如下
相同的HTML5 Canvas元素繪制操作宇弛,在不同操作系統(tǒng)鸡典、不同瀏覽器上,產(chǎn)生的圖片內(nèi)容不完全相同枪芒。在圖片格式上彻况,不同瀏覽器使用了不同的圖形處理引擎、不同的圖片導(dǎo)出選項(xiàng)舅踪、不同的默認(rèn)壓縮級別等纽甘。在像素級別來看,操作系統(tǒng)各自使用了不同的設(shè)置和算法來進(jìn)行抗鋸齒和子像素渲染操作硫朦。即使相同的繪圖操作贷腕,產(chǎn)生的圖片數(shù)據(jù)的CRC檢驗(yàn)也不相同。
知道了原理咬展,就懂得怎么實(shí)現(xiàn)了泽裳。很簡單,只要?jiǎng)?chuàng)建一個(gè)canvas破婆,然后繪制一個(gè)任意突然涮总,然后獲取它的base64編碼,就可以了祷舀。相同的瀏覽器瀑梗,訪問不同的網(wǎng)站烹笔,得到的編碼是一致的。而且這個(gè)特征是無法清除的抛丽。
防范的辦法也很簡單谤职,換個(gè)瀏覽器就行了。但是因?yàn)闉g覽器的可選范圍比較少亿鲜,而且用戶換瀏覽器的習(xí)慣也比較少允蜈,所以這個(gè)方法的還算是比較可靠。
至于應(yīng)用場景蒿柳,就有很多了饶套。例如你訪問了某個(gè)評測網(wǎng)站,看某款產(chǎn)品的評測垒探,這個(gè)網(wǎng)站記錄下了你的canvas指紋妓蛮,然后賣給電商網(wǎng)站。等你上電商網(wǎng)站的時(shí)候圾叼,你就能看到給你推薦你剛剛看到的產(chǎn)品了蛤克。
獨(dú)立博客:http://xianchen.cc