JavaScript 指紋識別與機器人偵測:網站如何識別你

3,421 次瀏覽 · · 42 分享
分享到
作者 Unled Network · 2026 年 4 月 5 日 · 17 分鐘閱讀
JavaScript 裝置指紋識別和機器人偵測,網站如何識別您

重點摘要

  • JavaScript 指紋識別 收集 50 多個瀏覽器特徵來建立唯一識別碼,比 Cookie 更持久,更難封鎖。
  • 關鍵指紋識別信號包括 Canvas、WebGL、AudioContext、字型、螢幕屬性和 Navigator API 資料.
  • 防機器人系統結合 JS 指紋識別與 TLS 指紋識別 (JA3/JA4) 以及行為分析,實現高度準確的機器人偵測。
  • 無頭瀏覽器 (Puppeteer、Playwright) 和自動化工具會留下 可偵測的痕跡 被指紋識別暴露,如缺失的 API、相同的輸出、時序異常。
  • 偽裝指紋識別是可能的,但難度日益提高,防機器人系統使用 一致性檢查 來捕捉不匹配的偽裝值。

每次你造訪網站時,你的瀏覽器都會無聲地洩露數十項獨特特徵,包括你的螢幕解析度、GPU型號、已安裝的字體、音訊處理特性,以及瀏覽器渲染隱形canvas元素的確切方式。這些信號組合在一起,會產生一個 瀏覽器指紋 它就像人類指紋一樣獨一無二。

這項技術支撐著現代機器人偵測系統、詐欺防範和反自動化防禦。無論你是在保護網站免受機器人侵害,還是想要瞭解為什麼某些安全系統會對你的流量提出質疑,瞭解其工作原理都至關重要。

什麼是JavaScript指紋識別?

JavaScript指紋識別是一種利用瀏覽器端JavaScript API來收集設備和環境特徵的技術,為每個瀏覽器session建立唯一識別符。與可被用戶刪除的Cookie或會改變的IP位址不同,指紋具有以下特性:

唯一性統計: EFF的Panopticlick計畫研究發現,83.6%的瀏覽器具有唯一的指紋。當納入canvas指紋識別時,唯一性超過95%。使用50個以上信號的現代系統在典型用戶群體中實現了接近100%的唯一性。

瀏覽器指紋如何運作

指紋識別script通常分三個階段運作:

  1. 收集: JavaScript API查詢瀏覽器屬性,包括navigator物件、螢幕屬性、canvas渲染、WebGL功能、AudioContext處理等
  2. 雜湊化: 收集的值被組合並雜湊化(通常使用SHA-256或MurmurHash3)成一個緊湊的指紋字串
  3. 比對: 該雜湊值與已知指紋進行比對,檢查是否與先前訪問者、已知的機器人工具或偽造環境相匹配

主要指紋信號

Canvas指紋識別

最強大的指紋識別信號。隱藏的<canvas>元素繪製文字、形狀和漸層。像素級輸出根據GPU、驅動程式版本、字體渲染引擎和反鋸齒實現方式而異。兩個不同的設備幾乎不可能產生相同的canvas輸出。

WebGL指紋識別

WebGL洩露GPU資訊(渲染器、供應商)並產生獨特的渲染輸出。WEBGL_debug_renderer_info擴展洩露確切的GPU型號。結合WebGL渲染測試,這會產生強大的硬體指紋。

AudioContext指紋識別

Web Audio API由於硬體和軟體差異,在各設備上的音訊信號處理方式不同。透過生成振盪器並分析輸出,指紋識別script可以捕捉獨特的音訊處理特性。

字體指紋識別

不同的OS版本、語言包和已安裝的應用程式會增加獨特的字體集合。透過測量各種字體中文字的渲染寬度和高度,script能夠判定已安裝的字體,進而建立基於字體的指紋。

Navigator與螢幕屬性

信號洩露內容
navigator.userAgent瀏覽器版本、作業系統、裝置類型中等(容易被偽造)
navigator.language偏好語言低-中等
navigator.hardwareConcurrencyCPU核心數
navigator.deviceMemory記憶體容量(近似值)
screen.width/height顯示器解析度中等
screen.colorDepth色彩深度功能
navigator.platform作業系統平台字串低(已棄用)
navigator.maxTouchPoints觸控功能
Intl.DateTimeFormat().resolvedOptions().timeZone時區中等

其他高價值信號

TLS指紋辨識(JA3/JA4)

TLS指紋辨識在連線層級運作,在任何JavaScript執行之前

JA3 指紋辨識

由 Salesforce 開發,JA3 對 TLS Client Hello 訊息的組件進行雜湊處理,包括 SSL 版本、密碼套件、擴展、橢圓曲線和 EC 點格式。每個 HTTP 用戶端(Chrome、Firefox、Python requests、Go http、curl)都會產生獨特的 JA3 雜湊值。即使使用者代理標頭遭到偽造,JA3 仍能識別出實際的用戶端軟體。

JA4 指紋辨識

較新的 JA4 標準改進了 JA3,具有更易於人類閱讀的格式和更佳的版本追蹤。它建立的指紋字串如「t13d1715h2_8daaf6152771_b0da82dd1658」,其中編碼了 TLS 版本、密碼套件計數、擴展計數和 ALPN 值。

為什麼 TLS 指紋辨識對機器人造成毀滅性打擊: 偽造 TLS 指紋需要在 C/C++ 層級修改 TLS 庫,難度遠高於更改使用者代理字串。大多數機器人運營商使用 Python、Go 或 Node.js HTTP 庫,這些庫都有獨特的 JA3 雜湊值,會立即將它們識別為非瀏覽器用戶端。

反機器人系統如何使用指紋辨識

現代反機器人解決方案如 Cloudflare Bot Management、Akamai Bot Manager 和 DataDome 將指紋辨識與多重檢測層相結合:

  1. TLS 指紋檢查: 驗證連線來自真實瀏覽器,而非 HTTP 庫
  2. JavaScript 執行: 執行指紋收集指令稿,無法執行 JS 的機器人會立即被標記
  3. 一致性驗證: 檢查 JS 指紋是否與 TLS 指紋相符(例如,JA3 顯示 Chrome 但 canvas 顯示無頭,就標記為異常)
  4. 已知機器人比對: 將指紋與已知機器人工具特徵的資料庫進行比對
  5. 行為疊加層: 將指紋分數與滑鼠移動、點擊時序和滾動模式相結合

偵測無頭瀏覽器

無頭瀏覽器(Chrome headless、Puppeteer、Playwright)會留下明顯跡象:

指紋偽造與反偵測

多個工具嘗試修改瀏覽器指紋:

工具方法偵測風險
GoLogin可設定指紋配置檔的自訂 Chromium中等
Multilogin具有深度指紋自訂功能的瀏覽器模擬工具中等
Puppeteer Extra (Stealth)修補可偵測 Puppeteer 人工製品的外掛程式中等到高
undetected-chromedriver經過修改的 ChromeDriver,可避免常見的偵測中等到高
瀏覽器擴充功能Canvas 阻擋器、WebGL 欺騙高(會增加可偵測的人工製品)
欺騙的根本難題: 要改變 Canvas 輸出以符合不同的 GPU,必須完美模擬該 GPU 的渲染管線。反機器人系統測試數百個微小差異,幾乎不可能持續欺騙。偽造值之間的不一致往往比原始指紋更容易被偵測。

網站所有者的防禦策略

如果您要保護網站免受機器人攻擊,應將指紋識別作為分層防禦的一部分:

隱私隱憂

瀏覽器指紋識別引發了重大隱私疑慮。主要瀏覽器越來越多地限制指紋識別功能:

保護您的網站免受機器人攻擊

我們的安全團隊為遭受攻擊的網站和應用程式提供完整的機器人偵測、裝置指紋識別、DDoS 防護和 WAF 設定服務。

Telegram: @unlednetwork →    WhatsApp 聯繫我們 →

留言

有問題或親身經驗嗎?加入討論。您的電子郵件不會公開。

    Maria S.

    We implemented this last month and already seeing positive signals.

    Author

    Appreciate you sharing this. We've refined our playbook for exactly this scenario and it aligns with the article.

加入討論

不接受 HTML。留言將經過審核。

What You Get

High Trust Score

Pre-established account with positive activity history and cleared standing

Ready to Spend

Skip the warm-up phase - accounts are ready for immediate campaign launch

High Spend Ceiling

Elevated daily and monthly spend limits from day one

30-Day Replacement

Full replacement if account triggers suspension within 30 days

24h Delivery

Credentials delivered within 24 hours of payment confirmation

Dedicated Support

Direct Telegram/WhatsApp line to your account manager

WhatsApp Telegram