如同四季分陰陽(yáng),日分黑白,很多事物都存在正反兩面。在IT信息安全領(lǐng)域也同樣存在正反。比如:
用戶和軟件廠商:用戶注重隱私安全,不允許軟件獲取個(gè)人信息和操作權(quán)限等。軟件供應(yīng)商希望獲取用戶信息和操作記錄,以此能夠做定向推廣和業(yè)務(wù)決策;
白帽黑客和黑帽黑客:白帽使用其技能來(lái)識(shí)別和修復(fù)安全漏洞,黑帽利用系統(tǒng)漏洞盜竊數(shù)據(jù)、破壞系統(tǒng)等;
攻防演練的紅隊(duì)藍(lán)隊(duì):紅隊(duì)使用各種攻擊技術(shù)和策略來(lái)嘗試滲透系統(tǒng),以發(fā)現(xiàn)潛在的安全漏洞,藍(lán)隊(duì)負(fù)責(zé)防御紅隊(duì)的攻擊,保護(hù)系統(tǒng)不受侵害;
數(shù)據(jù)的加密和解密:一系統(tǒng)需要將數(shù)據(jù)進(jìn)行復(fù)雜加密存儲(chǔ),防止外在程序的竊取,而某些系統(tǒng)則需要對(duì)數(shù)據(jù)解密,用于特點(diǎn)的場(chǎng)景下數(shù)據(jù)分析。
這正如我們以前分享的兩篇關(guān)于瀏覽器和搜索引擎隱私的文章:無(wú)論Neko還是SearXNG,都是從保護(hù)個(gè)人隱私角度出發(fā),用戶在使用瀏覽器的同時(shí)避免個(gè)人隱私信息的泄漏。企業(yè)希望用戶在使用軟件的時(shí)候,獲取到各種的用戶信息,比如有多少人訪問(wèn)了網(wǎng)站,訪問(wèn)地址來(lái)源于哪些地方,訪問(wèn)人群的分類,是否有重復(fù)訪問(wèn)等情況。因?yàn)檫@些數(shù)據(jù)能夠幫助企業(yè)制定更好的運(yùn)營(yíng)策略,廣告投發(fā)等等。
所以,從企業(yè)角度來(lái)說(shuō),會(huì)采用各種技術(shù)獲取用戶的信息,即使用戶采取的一些安全防護(hù)隱私的方法和手段。這也是一種安全層面的正反和技術(shù)對(duì)抗!
而今天主要介紹的就是一個(gè)瀏覽器指紋識(shí)別庫(kù)-fingerprintjs
PS:瀏覽器指紋是一種用于識(shí)別和追蹤設(shè)備的技術(shù),它通過(guò)收集用戶瀏覽器和設(shè)備的多種屬性(如用戶代理、屏幕分辨率、插件列表、字體、Canvas和WebGL特性等)來(lái)生成一個(gè)獨(dú)特的標(biāo)識(shí)符,用于識(shí)別和區(qū)分用戶。
一個(gè)開(kāi)源的JavaScript庫(kù),它通過(guò)收集用戶瀏覽器的多種屬性(如屏幕分辨率、瀏覽器插件、字體、Canvas和WebGL等)來(lái)生成一個(gè)獨(dú)特的瀏覽器指紋,用于識(shí)別和追蹤用戶。

項(xiàng)目信息

功能特性
高度準(zhǔn)確:能夠生成高度準(zhǔn)確的瀏覽器指紋,專業(yè)版準(zhǔn)確率高達(dá)99.5%。
多種數(shù)據(jù)源:從多個(gè)數(shù)據(jù)源收集信息,包括但不限于用戶代理、屏幕分辨率、系統(tǒng)字體、WebGL、Web Audio、Canvas 等。
輕量級(jí):庫(kù)的體積相對(duì)較小,不會(huì)顯著增加網(wǎng)頁(yè)的加載時(shí)間。
易于集成:作為一個(gè)JavaScript庫(kù),可以很容易地集成到現(xiàn)有的網(wǎng)站和應(yīng)用程序中。
實(shí)時(shí)生成:在用戶訪問(wèn)網(wǎng)站時(shí)實(shí)時(shí)生成指紋,無(wú)需額外的服務(wù)器處理。
跨瀏覽器兼容性:支持所有主流瀏覽器,包括 Chrome、Firefox、Safari、Edge 等。
安全:生成的指紋通常是加密的,以減少數(shù)據(jù)泄露的風(fēng)險(xiǎn)。
自定義:開(kāi)發(fā)者可以根據(jù)自己的需求選擇性地啟用或禁用某些數(shù)據(jù)收集功能,以符合特定的隱私政策或法律要求。
Demo效果

<script src="https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3.3.2/dist/fp.min.js"></script>
<script>
async function getFingerprint() {
const result = await FingerprintJS.load();
const visitorId = await result.get();
console.log(visitorId.visitorId); // 打印生成的指紋
}
getFingerprint();
</script>
#npm安裝
npm install @fingerprintjs/fingerprintjs
#JavaScript 代碼中使用
import FingerprintJS from '@fingerprintjs/fingerprintjs';
async function getFingerprint() {
const result = await FingerprintJS.load();
const visitorId = await result.get();
console.log(visitorId.visitorId); // 打印生成的指紋
}
getFingerprint();
可以將生成的指紋發(fā)送到服務(wù)器進(jìn)行存儲(chǔ)和分析。也可以將指紋存儲(chǔ)在本地存儲(chǔ)(如 localStorage)中,以便在用戶的后續(xù)訪問(wèn)中使用。
# 以下是一個(gè)示例,展示了如何將生成的指紋發(fā)送到服務(wù)器:
import FingerprintJS from '@fingerprintjs/fingerprintjs';
async function getFingerprint() {
const result = await FingerprintJS.load();
const visitorId = await result.get();
// 發(fā)送指紋到服務(wù)器
fetch('/api/fingerprint', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ fingerprint: visitorId.visitorId }),
})
.then(response => response.json())
.then(data => console.log(data))
.catch((error) => console.error('Error:', error));
}
getFingerprint();
FingerprintJS 還提供了一些配置選項(xiàng),允許自定義指紋生成過(guò)程。例如,可以排除某些組件:
import FingerprintJS from '@fingerprintjs/fingerprintjs';
async function getFingerprint() {
const options = {
exclude: {
deviceType: true,
userAgent: true,
},
};
const result = await FingerprintJS.load(options);
const visitorId = await result.get();
console.log(visitorId.visitorId);
}
getFingerprint();
03
由于瀏覽器指紋涉及收集用戶的敏感信息,因此在使用時(shí)應(yīng)確保遵守隱私法規(guī)和用戶同意,并采取適當(dāng)?shù)拇胧﹣?lái)保護(hù)用戶的隱私。
該文章在 2024/9/18 12:32:17 編輯過(guò)