數位指紋採集

數位指紋採集的作用,是嘗試在使用者回訪您的網站時識別使用者,或是跨不同網站辨識相同的使用者。 您的設定可能和其他人的特性有所不同。舉例來說,您使用的裝置可能不是 其他瀏覽器、螢幕尺寸也不同,且安裝了不同的字型。如果我有「Dejavu Sans」字型 安裝您的軟體後,任何網站只要查看該字型,即可判斷該網站是否有差異。這是 數位指紋採集的運作方式;建構這些資料點的集合,您就能透過更多方式辨別使用者。

更正式的定義可能像這樣:數位指紋採集是使用明顯且不明顯的長效型 使用者設定的特性,以便盡可能區分其他使用者。

為什麼數位指紋採集會阻礙使用者隱私

不過,在某些情況下 (例如詐欺偵測) 來保護使用者數位指紋採集相當重要。數位指紋採集 用來跨網站追蹤使用者,通常會在使用者未同意的情況下進行追蹤 (有時則是 未充分告知使用者。完成這個步驟後,這些使用者通常會 抱持平靜的態度,覺得不受懲處。

數位指紋採集的功用是找出使用者之間的區別。我們可以利用指紋辨識功能 使用者仍然在同一個網站上,或是在兩個不同的瀏覽器設定檔中識別同一位使用者。 也就是說,數位指紋採集可用於追蹤跨網站的使用者。具有確定性和過度浮現的追蹤方式 例如儲存具有專屬使用者專屬 ID 的 Cookie,在某種程度上由使用者觀測到 (前一單元說明瞭部分方法)。但數位指紋採集較難 因為這屬於隱密功能仰賴不具變化的特徵,且很有可能在無形中發生。這就是為什麼 「指紋處理」。變更指紋、使用數位指紋或末端的指紋都不容易 。

瀏覽器供應商知道使用者不喜歡受到追蹤,且持續導入可限制數位指紋採集的功能 (我們在上一個單元中已介紹過某些部分)。以下將說明這些功能可能對貴公司造成哪些影響 以及如何在能保護隱私權的情況下,採取下一步行動。進一步瞭解瀏覽器保護方式 避免數位指紋採集會影響您的行為和方式,而不是導致您無法進行數位指紋採集。

實務上,大多數開發人員和大多數企業都不需要使用者指紋辨識功能。如果應用程式要求使用者登入 您的使用者會在徵得同意的情況下表明您的身分,且他們可以透過某種方式 選擇自己的應用程式這項功能可確保使用者隱私,因此能保障隱私。您的應用程式可能 而且使用者就必須登入,因此保護使用者然後再收集 只擷取您需要的資料)。

正確做法

評估第三方的指紋辨識功能。在第三方單元中 可能就已經包含您所納入的任何第三方服務,以及他們提出的網路要求。可能有 檢查這些要求,看看哪些資料正傳遞給來源者 (如果有的話)。不過,這通常相當困難 數位指紋採集是隱密程序的一種,也就是要求不需要使用者核准的資料。

建議您也詳閱第三方服務的隱私權政策和依附元件,藉此找出數位指紋採集的跡象 。有時也稱為「機率比對」或 機率比對技術套件的其中一環 而不是「確定性比對」

數位指紋採集的運作方式

通常這些屬性通常獨有,或者 至少與一小群相似的人分享就可以用來掩蓋你的位置

題外:被動式和主動數位指紋採集

被動式和主動數位指紋採集技術明顯區別。被動數位指紋採集 是預設技術運用網站資訊的方法;編碼器-解碼器架構 這會明確地干擾瀏覽器以取得額外資訊。這種區別很重要 可能試圖偵測、攔截或緩解主動技術。可以限制 API 或閘道為對話方塊背後 要求使用者授權 (並通知使用者正在使用或拒絕他們使用) )。被動式技術會使用已提供給網站的資料,但過去多半是因為 在資訊超級高速公路的瞬間,所有網站都能看到 這些資訊。使用者代理程式字串是 我們會進一步探討相關細節很多都有助於提供大量 使用者的瀏覽器、版本和作業系統等相關資訊,網站可能會以不同的方式呈現 根據這些資訊然而,這也會增加可辨識資訊的識別性、 有助於識別不同的使用者因此這類資訊已不復存在 ,使其變得無法區分如果我們需要的是這些資訊, 程式碼分支,會根據不同的使用者代理程式,而隨著瀏覽器逐漸凍結或停止這些資訊,程式碼可能會損毀。 測試是這裡的最佳防禦工事 ( 稍後查看)。

題外之處:評估數位指紋採集

每個資料點提供多少資訊的技術措施稱為「熵」,以位元為單位。 有許多不同的可能值 (例如已安裝的字型清單) 的功能可以產生許多位元 相對地,若沒有顯著的顯著性 (例如您採用的作業系統) 可能只會 好幾個問題HTTP Almanac 說明現有的數位指紋採集方式 程式庫會將來自不同 API 的回應合併成「雜湊」,這種程序自動化,因此只能找出 一小群使用者 (甚至只有一位使用者)Maud Nalpas 進一步探討 觀看這部 YouTube 影片,簡單來說,假設 好友名單,包含他們喜愛的音樂、喜愛的食物和使用的語言...除了名稱外,還有他們的名字 已移除聯絡人清單很有可能足以做為您的好友識別,或者您也可以縮小搜尋範圍 並分享給部分使用者數位指紋採集的運作方式而你喜歡的項目清單就會變成「雜湊」。取代為 這種雜湊值會更容易在兩個未連結的網站上識別出同一位使用者,這項功能的目標是 追蹤:規避使用者的隱私保護。

瀏覽器會如何處理數位指紋採集?

重要的是,瀏覽器廠商對於網站 (或網站上的第三方) 有許多不同的建立方式。 計算使用者的不重複指紋,或計算可識別獨特性的獨特資訊 指紋片段其中一些方式較為明確且經過謹慎處理,例如瀏覽器的使用者代理程式字串,通常 可辨識使用中的瀏覽器、作業系統和版本 (如果您具有 我使用不同的瀏覽器)。其中有些方法並非刻意設計為可數位指紋採集 ,例如字型清單,或瀏覽器可用的視訊和音訊裝置。(瀏覽器不必使用 以取得這些裝置的名稱清單)。有些人確立可以妥善保護指紋 例如在畫布元素上精確顯示字型消除鋸齒。 此外,與我的瀏覽器和我的不同,瀏覽器也不斷增加都會添加熵,因此 功能,辨識您與我的不同,並在各個網站上盡可能識別出個別使用者。 https://amiunique.org 瀏覽一份完整清單,當中列出系統可歸因的指紋辨識功能 (但不一定完整) 而且這類清單會隨時間不斷增加 (因為使用者對於數位指紋採集使用者非常有金錢利益,即便使用者 或系統未預期的事情)。

不支援特定功能強大的 API

對上述所有計算使用者指紋的方法,瀏覽器廠商都做出了回應, 來自這些 API 的熵量最嚴格的選項就是不要在一開始就導入。 部分主要瀏覽器早已導入各種硬體和裝置 API (例如 NFC 和透過 這個 這顯然可能會影響您的應用程式和服務:在未實作 API 的瀏覽器中,您完全不會使用 API,而且可能會 限製或完全排除某些硬體方法,不做任何考慮。

使用者權限閘道

瀏覽器廠商採取的第二種做法,就是防止在未獲使用者明確授權的情況下,存取 API 或資料。 這種方法往往是基於安全考量,所以網站不能使用網路攝影機拍照 不用經過您的許可!不過,隱私權與安全性可能會有類似的興趣。辨識某人的位置 當然也侵犯了隱私權,但指紋辨識的不重複性也很大。需要權限 以瞭解地理位置並不會讓某個位置增加該指紋所需的額外熵,但會 基本上,這種做法不需要「使用」地理位置進行數位指紋採集,因為這種收集方式不會再發生。解碼器的重點在於 數位指紋採集的目的在於「明顯」區分使用者。如果準備讓使用者知道 ,因此不需要數位指紋採集技術。請使用者建立帳戶並登入 。

新增不可預測性

在某些情況下,第三種做法是供瀏覽器供應商「模糊」和來自 API 的回應 因而降低識別度如同資料模組中隨機回應機制的一部分所述 方法。瀏覽器供應商 也能使用這個方法處理提供給網頁應用程式和第三方的 API 資料。例如 用於評估網頁效能的精確時間 API 來自 window.performance.now()。瀏覽器知道這些值 可縮減到微秒的準確率,但傳回的值會四捨五入至最接近的 20 微秒,故意降低精確度 邊界,避免其在數位指紋採集 (同時是為了安全性而避免時間攻擊) 的界線。這個步驟的目標是 確保 API 持續實用,但提高回應的識別度:基本上,是為了提供「固態免疫」方法是製作 您的裝置看起來與其他人的裝置類似,不會讓人眼花撩亂。Safari 提供簡化版的系統設定

強制執行隱私預算

「隱私公開程度上限」是一項提案,可建議瀏覽器預估每個數位指紋採集所顯示的資訊。 瀏覽器尚未提供這項功能。我們的目標是允許使用強大的 API,同時維護使用者隱私。進一步瞭解隱私預算提案

使用廣泛的測試環境

上述所有功能都會影響您建構應用程式和服務的方式。尤其是,回應和做法有很多多樣性 各個瀏覽器和平台上也就是說,在不同環境中測試工作是「關鍵」。 當然,這固然重要,但可以合理地假設 使用轉譯引擎。因此,不管該引擎所屬瀏覽器或平台為何,都可能只想在單一 例如閃爍式瀏覽器)。這在強調 API 使用的情況下並不明顯,因為瀏覽器使用 算繪引擎可能在其他方面有所不同,因為他們針對數位指紋採集強化 API 介面的方式可能存在極大差異。

正確做法

  • 測試自己的數據分析和目標對象,決定測試時應優先使用的瀏覽器。
  • 可測試的優質瀏覽器有:Firefox、Chrome、Edge、Safari 電腦版、Android 上的 Chrome 和 Samsung Internet。 和 iOS 上的 Safari這可確保您在測試三種主要的轉譯引擎 (Firefox 中的 Gecko 與 Blink 的各種分支) 之間進行測試 Chrome、Edge 和 Samsung Internet,以及 Safari 中的 Webkit),以及行動裝置和電腦平台。
  • 如果您的網站也可能用於較不常見的裝置,例如平板電腦、智慧手錶或遊戲主機,請一併進行測試。 某些硬體平台在行動裝置和電腦上可能無法即時更新瀏覽器,因此部分 API 可能未實作, 這些平台的瀏覽器
  • 使用一或多個聲稱使用者隱私有動機的瀏覽器進行測試。包含即將推出的預先發布版和測試版 最常見的瀏覽器,以及 Safari 的技術搶先版 Chrome 的 Canary Beta 版。 讓您能在變更影響網站的 API 故障和變更之前,找出影響網站的 API 故障和變更。 對使用者的影響。同樣地,防範使用者並參照現有數據分析如果您的 使用者數量較多的舊款 Android 手機,請務必將這些手機納入測試。大多數人沒有 快速硬體和最新版本
  • 使用乾淨的設定檔和無痕模式/私密瀏覽模式進行測試。這可能是因為您已授予 授予個人資料夾需要的權限測試如果你拒絕讓該網站存取任何問題,會發生什麼事。
  • 使用 Firefox 的指紋保護功能明確測試網頁 模式。這樣一來,網頁就會顯示權限對話方塊,或是針對部分 API 傳回模糊資料。 如此一來,就能確認服務中的第三方是否使用指紋資料 。然後,您可以思考刻意模糊化的程度是否會讓操作過程更困難。建議製作 據此進行修正,以取得其他來源的資料、進行除錯,或採用較不精細的資料。
  • 「第三方」單元所述,稽核第三方 等依附元件確認他們是否使用數位指紋採集技術。被動指紋偵測難以偵測 (以及 這就不可能),但數位指紋採集模式可能會標記某些數位指紋採集技術 並尋找使用 navigator.userAgent 或未預期的 <canvas> 物件建立,或許也說明瞭幾種方法 值得進一步審查另外,您也可以查看「機率比對」一詞的使用方式行銷或 技術內容:說明第三方;有時可能代表使用數位指紋採集技術。

跨瀏覽器測試工具

基於隱私權目的測試程式碼並不容易,如先前所述,進行手動測試時應留意的事項。 如果您拒絕讓網站存取任何 API (例如針對該網站嘗試存取的 API),會發生什麼情況?如何向使用者顯示? 自動測試無法判斷該網站是否以協助使用者信任網站,也無法透過相反方式鼓勵使用者信任網站。 或是認為有東西遭到隱藏

不過,網站經過稽核後,可以透過 API 測試,確認新版瀏覽器或 即將推出的「Beta 版」以及「預覽」版本) 的部分,且大部分應納入現有測試套件中。發生某些問題 使用自動化測試工具時,您可以考慮使用自動化測試工具。這是因為大多數瀏覽器都允許 控管可用的 API 和功能Chrome 可透過指令列切換功能使用, 和 Firefox 一樣,而且可在測試工具中使用這些功能 設定可讓您在開啟或關閉 API 的情況下執行特定測試。(舉例來說,Cypress 的 瀏覽器啟動外掛程式 第二步的 launch.args 參數 加入瀏覽器旗標)。

僅參考使用者代理程式字串來取得粗略資訊

再舉一個例子:瀏覽器自網頁一開始就在傳送要求時, HTTP 使用者代理程式標頭。一直以來,大家都很久以為不要使用使用者代理程式標頭的內容 向不同的瀏覽器提供不同的內容;而且一直以來都是由網頁程式開發人員代勞, 某些 (非全部) 情況下可能提供理由不希望瀏覽器為了提供不理想的網站體驗而單一瀏覽器 因此,每個瀏覽器都會假裝為其他瀏覽器,而使用者代理程式字串如下所示:

Mozilla/5.0 (Linux; Android 6.0.1; SGP771 Build/32.2.A.0.253; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36

這項主張包括 Mozilla/5.0 (此瀏覽器與首屆太空人同時上市) 的瀏覽器 二十多年前,在國際太空站上登載了。使用者代理程式字串是豐富的熵, 當然,以及降低數位指紋採集的可能性,瀏覽器製造商可能已凍結使用者代理程式標頭,或正常運作中 。這是另一個範例:在 API 提供的資料變更時,不一定要完全移除 API。 如果傳送空白的使用者代理程式標頭,將導致無數網站誤以為有網站存在。一般來說,瀏覽器 就是移除它中的部分細節 然後保持不變(您可以在 SafariChrome、 和 Firefox。)這項保護機制 詳細的數位指紋採集表示您再也無法依賴使用者代理程式標頭 因此,請務必找出替代資料來源。

明確來說,使用者代理程式中的資料不會完全消失,但資料以較低度顯示,或 有時可能會不正確,因為系統可能會回報較舊但變動的號碼。例如,Firefox、Safari 和 Chrome 全大寫 回報 macOS 版本號碼至 10 (請參閱「減少使用者代理程式字串更新」一節)。 這裡有更多討論)。如要進一步瞭解 Chrome 計劃如何減少使用者代理程式字串中的資料,請參閱「User-Agent Reduction」一文 但簡單來說,在回報的瀏覽器版本號碼中,通常只會有主要版本 (因此版本號碼) 看起來會像 123.0.0.0,即使瀏覽器為 123.10.45.108 也沒問題。此外,OS 版本也會沒有詳細資料, 就會凍結到幾個不變的選項中因此在想像 Chrome 123.45.67.89 中, 「Windows 20」會回報版本編號為:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36

您需要的核心資訊 (瀏覽器版本) 仍然存在:適用於 Windows 上的 Chrome 123。但子公司 資訊 (晶片架構、Windows 版本、模擬的 Safari 版本、瀏覽器子版本) 。

將此資料與「目前」比較不同平台上的 Chrome 使用者代理程式:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36

唯一的差別在於 Chrome 版本號碼 (104) 和平台 ID。

同樣地,Safari 的使用者代理程式字串則會顯示平台和 Safari 版本號碼,並在 iOS 上提供 OS 版本。 但其他東西會停止運作因此,在虛構 macOS 20 上執行的虛構 Safari 1234.5.67 可能會提供下列使用者代理程式:

Mozilla/5.0 (Macintosh; **Intel Mac OS X 10_20_0**) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15

在虛構的 iOS 20 上,可能的類型如下:

Mozilla/5.0 (iPhone; CPU **iPhone OS 20_0** like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/**20.0 Mobile/15E148 Safari/605.1.15**

再次提醒您,可使用核心資訊 (也就是 Safari,適用於 iOS 或 macOS),而 iOS Safari 仍會提供 iOS 版本號碼。 但過去可使用的許多附屬資訊已凍結。重要的是,這包括 Safari 版本號碼 (不一定隨時可用)。

遭檢舉使用者代理程式的變更過於熱辯。https://github.com/WICG/ua-client-hints#use-cases totalmarises 摘要 導致改變的部分論點和原因;Rowan Merewood 則設有投影片 ,以及避免使用使用者代理程式來區分差異的策略,詳情請參閱「通用 Analytics 客戶提示」提案。

模糊

模糊是資安實踐的術語,其中呼叫 API 時會得到非預期的值,希望能夠處理 以免發生非預期的情況並造成安全性問題。網站開發人員應熟悉跨網站指令碼攻擊 (XSS)。 這類程序涉及在網頁中加入惡意指令碼,這通常是因為網頁並未正確逸出插入的 HTML (所以您進行搜尋) 其中含有 <script> 文字)。後端開發人員將會得知 SQL 插入, 未正確驗證使用者輸入內容的資料庫查詢會曝露安全性問題 (以 xkcd 為例, Little Bobby Tables)。模糊 (又稱為模糊測試) 則更為正確 用於自動嘗試向 API 提供許多無效或非預期的輸入內容,並檢查結果是否有安全性外洩; 發生當機或其他不當處理這些都是故意提供錯誤資訊的例子。但在這裡 濫用使用者代理程式,藉此鼓勵開發人員停止依賴這些資料。

正確做法

  • 檢查程式碼集,確認是否有仰賴使用者代理程式字串的情況 (搜尋「navigator.userAgent」可能會找到次數最多的結果) ,而您的後端程式碼可能會尋找 User-Agent 做為標頭,包括 依附元件
  • 如果您在自己的程式碼中發現了用途,請評估程式碼檢查的內容,然後找出其他可區分的方法 (或是找出替代的依附元件,或透過提交問題或檢查依附元件,與依附元件上游合作)。偶爾 要解決瀏覽器錯誤,就必須加以區別。不過,一旦當機,使用者代理程式就會漸漸無法修改。
  • 您可能安全無虞。如果您只採用品牌、主要版本和平台的核心價值,這些價值幾乎不會改變 且正確無誤
  • MDN 說明瞭避免依賴使用者代理程式字串 ("瀏覽器監聽") 的好方法。 也就是特徵偵測
  • 如果您某種程度上仰賴使用者代理程式字串 (即便是運用到一些仍然有用的核心值),也是個好方法 ,試用即將在新瀏覽器版本中即將推出的使用者代理程式進行測試。您可以使用即將推出的瀏覽器進行測試 透過 Beta 版或技術預覽版本來部署版本,但您也可以自訂 進行測試。您可以在 Chrome、EdgeFirefoxSafari、 進行本機開發時,為了檢查您的程式碼處理使用者可能收到的不同使用者代理程式值。

用戶端提示

提供這項資訊的主要提案之一是「User-Agent Client Hints」 但並非所有瀏覽器都支援這個做法支援的瀏覽器會傳遞三個標頭:Sec-CH-UA 瀏覽器品牌和版本號碼;Sec-CH-UA-Mobile,用於指出請求是否來自行動裝置;和Sec-CH-UA-Platform、 也就是指定作業系統的名稱(剖析這些標頭可能不如預期來得簡單 結構化標頭而非簡單字串 而這是由傳送「tricky」的瀏覽器所強制執行值;如果無法正確剖析,則無法正確處理。也就是 瀏覽器一開始即進行了「模糊測試」的例子,開發人員必須使用這項資料來處理 因為資料設計使得錯誤或延遲剖析可能會產生不良結果 (例如顯示沒有成效提升的品牌) 或未正確關閉的字串)。幸好,瀏覽器也會直接將這項資料提供給 JavaScript,如 navigator.userAgentData,此物件在支援的瀏覽器中可能如下所示:

{
  "brands": [
    {
    "brand": " Not A;Brand",
    "version": "99"
    },
    {
    "brand": "Chromium",
    "version": "96"
    },
    {
    "brand": "Google Chrome",
    "version": "96"
    }
  ],
  "mobile": false
}