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