TEST12138

TEST12138

长路漫漫,唯心作伴。

瀏覽器指紋

大家有時可能會瀏覽一些網站,瀏覽的時候會打開無痕窗口
打開以後就認為無痕了,那麼實際上是這樣嗎
實際情況可能要細思極恐的多
它不僅知道你是誰,還知道你幹了什麼,而且它知道的比你想的多的多
有人就會說了,不就是通過 ip 嗎,我掛個代理不就行了
如果我告訴你不用 IP 也能知道呢
那麼是怎麼做到的呢
這得益於一個叫瀏覽器指紋的技術,這是一個非常非常成熟的技術
可以在沒有 cookie、沒有登錄的情況下,準確的知道用戶是誰
實現原理也非常簡單
全世界有這麼多的設備,但是很難找出兩個一樣的設備環境
比如 ip 地址、瀏覽器版本、瀏覽器的語言、瀏覽器的字體設置、時區等等
基於這些信息,生成一個或者多個哈希值,那麼這個或者多個哈希值大概率是唯一的
不能保證完全不重複,但是唯一性比較高
比如用 canvas 生成一個 hash
簡單寫一下

		function getCanvasFingerprint() {
			const canvas = document.createElement('canvas')
			canvas.width = 200;
			canvas.height = 200
			const ctx = canvas.getContext('2d');
			ctx.fillStyle = 'rgb(128,0,0)';
			ctx.fillRect(10, 10, 100, 100);
			ctx.fillStyle = 'rgb(0,128,0)';
			ctx.fillRect(50, 50, 100, 100);
			ctx.fillStyle = 'rgb(0,128,0)';
			ctx.fillRect(30, 30, 80, 80);
			ctx.font = '20px Arial';
			ctx.fillStyle = 'rgb(0,0,0)';
			ctx.fillText('hello', 60, 110);
			const dataURL = canvas.toDataURL();
			const hash = hashCode(dataURL)
			return hash
		}

		function hashCode(str) {
			let hash = 0;
			for (let i = 0; i < str.length; i++) {
				const char = str.charCodeAt(i);
				hash = (hash << 5) - hash + char;
				hash |= 0;
			}
			return hash
		}
		const canvasFing = getCanvasFingerprint()
		console.log(canvasFing)

正常瀏覽生成的值是 291669864

image

無痕瀏覽下是也是 291669864

image

怎麼才能不一樣呢
換個瀏覽器或者設備

image

Screenshot_20230802_151336

繪製同樣的一個 canvas 為什麼生成的值不一樣呢
這是因為不同的瀏覽器,同一個瀏覽器的不同版本,不同的操作系統,不同的硬件,他們的繪製引擎或多或少都有差異,儘管繪製的是同一個 canvas,但是繪製出來的都會有一些肉眼難以察覺的差異,生成到數據裡,就會造成數據的差異
這是受很多因素影響的,甚至可能你在瀏覽器上安裝了個插件都會造成影響,包括瀏覽器設置,操作環境設置等
這只是一個 canvas,如果綜合其他生成的 hash 值,僅僅一個代理是沒用的
這個主要用途是廣告(購物廣告等),防刷(刷票,刷播放量等)
但是根本是為了分辨用戶,所以如果你瀏覽的某些網站要分辨你的話,還是很容易的

不過有一個東西叫指紋瀏覽器,可以在一個瀏覽器裡面切換不同的指紋,但是都是收費的
實現方式也非常簡單,針對不同的指紋方式,去更改相應的 API

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。