網站指紋識別技術令人擔憂。它指的是收集足夠多的用戶元數據,從而識別用戶身份。 JavaScript 提供了各種指紋識別可能性,結合服務器訪問的IP地址,使得指紋識別變得非常普遍。
然而,人們通常不會將CSS視為指紋識別的媒介,因此認為它在某種程度上是“安全的”。但Oliver Brotchie 提出了一種僅使用CSS進行一定程度指紋識別的方案。
考慮一下我們擁有的所有@media
查詢。我們可以使用any-pointer
測試指針類型。想像一下,對於每個值,我們都從服務器請求一個完全唯一的背景圖像。如果請求了該圖像,我們就知道了這些@media
查詢為真。我們可以用類似這樣的方法開始進行指紋識別:
.pointer { background-image: url('/unique-id/pointer=none') } @media (any-pointer: coarse) { .pointer { background-image: url('/unique-id/pointer=coarse') } } @media (any-pointer: fine) { .pointer { background-image: url('/unique-id/pointer=fine') } }
結合我們可以使用prefers-color-scheme
測試暗模式偏好的事實,指紋識別就更加清晰了。事實上,Oliver 最關注的是當前CSS用戶首選項媒體查詢的草案:
即將發布的草案不僅使這種方法具有可擴展性,而且還會提高其精度。目前,如果沒有其他方法,很難將每個請求最終與特定訪問者聯繫起來,因為確定其來源的唯一可行方法是按連接的IP地址對請求進行分組。但是,使用新的草案,通過生成一個隨機字符串並將其插入每個訪問者的URL標籤中,我們可以準確識別該訪問者的所有請求。
還有更多方法。我們可以創建相隔1像素的媒體查詢,並為每個查詢請求一個背景圖像,從而完美地猜測訪問者的窗口大小。可能還有十幾個鮮為人知的奇特媒體查詢,但它們對於使用CSS進行指紋識別非常有用。將其與各種@supports
查詢結合使用,可以有效地猜測確切的瀏覽器。再結合測試特定本地字體安裝的經典技術,你就可以得到一個相當不錯的指紋識別機器。
@font-face { font-family: 'some-font'; src: local(some font), url('/unique-id/some-font'); } .some-font { font-family:'some-font'; }
生成的CSS代碼量很大(這是生成它的Sass代碼),但顯然一旦我們可以在URL中使用自定義屬性,它就會大大減少。
我並不太擔心這個問題,主要是因為我沒有禁用JavaScript,而JavaScript已經具備更廣泛的指紋識別能力。此外,已經存在其他類型的CSS安全漏洞,例如讀取已訪問鏈接(瀏覽器已解決)、按鍵記錄和用戶生成的內聯樣式,以及其他一些人在另一篇文章中指出的內容。
但是,Oliver關於指紋識別的研究非常出色,值得所有比我更了解網絡安全的人關注。
以上是基於CSS的指紋的詳細內容。更多資訊請關注PHP中文網其他相關文章!