如同四季分陰陽,日分黑白,很多事物都存在正反兩面。在IT信息安全領(lǐng)域也同樣存在正反。比如:
用戶和軟件廠商:用戶注重隱私安全,不允許軟件獲取個人信息和操作權(quán)限等。軟件供應(yīng)商希望獲取用戶信息和操作記錄,以此能夠做定向推廣和業(yè)務(wù)決策;
白帽黑客和黑帽黑客:白帽使用其技能來識別和修復(fù)安全漏洞,黑帽利用系統(tǒng)漏洞盜竊數(shù)據(jù)、破壞系統(tǒng)等;
攻防演練的紅隊藍(lán)隊:紅隊使用各種攻擊技術(shù)和策略來嘗試滲透系統(tǒng),以發(fā)現(xiàn)潛在的安全漏洞,藍(lán)隊負(fù)責(zé)防御紅隊的攻擊,保護(hù)系統(tǒng)不受侵害;
數(shù)據(jù)的加密和解密:一系統(tǒng)需要將數(shù)據(jù)進(jìn)行復(fù)雜加密存儲,防止外在程序的竊取,而某些系統(tǒng)則需要對數(shù)據(jù)解密,用于特點的場景下數(shù)據(jù)分析。
這正如我們以前分享的兩篇關(guān)于瀏覽器和搜索引擎隱私的文章:無論Neko還是SearXNG,都是從保護(hù)個人隱私角度出發(fā),用戶在使用瀏覽器的同時避免個人隱私信息的泄漏。企業(yè)希望用戶在使用軟件的時候,獲取到各種的用戶信息,比如有多少人訪問了網(wǎng)站,訪問地址來源于哪些地方,訪問人群的分類,是否有重復(fù)訪問等情況。因為這些數(shù)據(jù)能夠幫助企業(yè)制定更好的運營策略,廣告投發(fā)等等。
所以,從企業(yè)角度來說,會采用各種技術(shù)獲取用戶的信息,即使用戶采取的一些安全防護(hù)隱私的方法和手段。這也是一種安全層面的正反和技術(shù)對抗!
而今天主要介紹的就是一個瀏覽器指紋識別庫-fingerprintjs
PS:瀏覽器指紋是一種用于識別和追蹤設(shè)備的技術(shù),它通過收集用戶瀏覽器和設(shè)備的多種屬性(如用戶代理、屏幕分辨率、插件列表、字體、Canvas和WebGL特性等)來生成一個獨特的標(biāo)識符,用于識別和區(qū)分用戶。
一個開源的JavaScript庫,它通過收集用戶瀏覽器的多種屬性(如屏幕分辨率、瀏覽器插件、字體、Canvas和WebGL等)來生成一個獨特的瀏覽器指紋,用于識別和追蹤用戶。
項目信息
功能特性
高度準(zhǔn)確:能夠生成高度準(zhǔn)確的瀏覽器指紋,專業(yè)版準(zhǔn)確率高達(dá)99.5%。
多種數(shù)據(jù)源:從多個數(shù)據(jù)源收集信息,包括但不限于用戶代理、屏幕分辨率、系統(tǒng)字體、WebGL、Web Audio、Canvas 等。
輕量級:庫的體積相對較小,不會顯著增加網(wǎng)頁的加載時間。
易于集成:作為一個JavaScript庫,可以很容易地集成到現(xiàn)有的網(wǎng)站和應(yīng)用程序中。
實時生成:在用戶訪問網(wǎng)站時實時生成指紋,無需額外的服務(wù)器處理。
跨瀏覽器兼容性:支持所有主流瀏覽器,包括 Chrome、Firefox、Safari、Edge 等。
安全:生成的指紋通常是加密的,以減少數(shù)據(jù)泄露的風(fēng)險。
自定義:開發(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)行存儲和分析。也可以將指紋存儲在本地存儲(如 localStorage)中,以便在用戶的后續(xù)訪問中使用。
# 以下是一個示例,展示了如何將生成的指紋發(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 還提供了一些配置選項,允許自定義指紋生成過程。例如,可以排除某些組件:
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
由于瀏覽器指紋涉及收集用戶的敏感信息,因此在使用時應(yīng)確保遵守隱私法規(guī)和用戶同意,并采取適當(dāng)?shù)拇胧﹣肀Wo(hù)用戶的隱私。
該文章在 2024/9/18 12:32:17 編輯過