2013-05-06 40 views
1

如何爲每個客戶端生成唯一的指紋?使用javascript生成客戶端的指紋

我知道必須使用navigator對象,但某些屬性如navigator.battery不能在此方法中使用。

// battery included and unique may change. 
var uniqueHash = exampleHash(JSON.stringify(navigator)); 

怎樣才能正確的唯一指紋只是使用JavaScript和無cookie的每個用戶。

也必須包含跨平臺和較舊的瀏覽器。

我需要navigator.X

注意支持跨瀏覽器的列表: 我不想生成隨機哈希值。我想爲每個用戶生成系統基本哈希,我不想保存在Cookie或存儲上。

+1

您的意思是唯一標識衝浪用戶,即使他/她刪除了Cookie等。 – 2013-05-06 15:43:14

+0

@esseks問題已更新。看註釋。 – sweb 2013-05-06 15:45:28

+1

請把這個問題重新解釋一下,我不明白你在問什麼。你的意思是生成一個散列,標識User Agent + Screen Size +等的組合,並在所有請求中保留它,而不使用cookie? – 2013-05-06 15:49:55

回答

1
保持會話無需通過cookie

簡單的方法是附加一個唯一的哈希在頁面作爲GET參數(可能是UUID或類似的東西)的網址:

/my/fancy/url 

成爲

/my/fancy/url?HASHCODE 

每當服務器收到請求時,它捕獲HASHCODE(如果存在),否則它將生成一個請求,然後將其附加到服務頁面上的所有鏈接。

請注意,用戶可以操縱HASHCODE,並且在設計應用程序時應考慮到這一點。

無論如何,請注意,它在幻想網址時代是相當醜陋的。另外請注意,用戶跟蹤是一個棘手的問題,如果您沒有在服務條款中正確聲明,您可能會遇到法律問題。

編輯:你不能跟蹤一個人跨多個網站,而不使用任何他們的變種(閃光,會話存儲等)和網站之間共享域的cookie。沒辦法,你不能在一個域中設置一個變量或cookie,並在任何體面的瀏覽器中從另一個域訪問它,否則這將是一個很大的安全漏洞。

編輯:Panopticlick不能用作跟蹤方法,因爲它建立在統計匹配基礎上,而且它也很糟糕(嘗試從美國以外或剛剛發佈的Chrome/Firefox瀏覽https://panopticlick.eff.org/更新)。這是一個很好的證明概念,但沒有什麼可以用於此目的的。此外,您需要大量樣本來獲得統計相關的結果。

編輯:瀏覽器指紋識別能力很弱:許多瀏覽器都是自動配置的(如Chrome或Firefox),而官方的配置很少(20-40?也許多一點,如果你算Linux發行版編譯的)將找到具有相同用戶代理的一致用戶部分。此外,還有一系列具有類似配置的消費類個人電腦。

+0

這肯定會起作用,但指紋會隨着用戶開始新的會話而不同 – wycleffsean 2013-05-06 16:50:14

+0

由於他不想使用cookie,因此根本沒有機會保留會話中的ID。 – 2013-05-06 17:11:58

+0

不僅僅是JavaScript, – wycleffsean 2013-05-06 18:34:15

1

一條值得關注的路線是使用Mozilla Persona API。它公開了一個navigator.id屬性用於消費。從用戶那裏獲得唯一的ID就像......

navigator.id.get(function(unique_id) { 
    alert("this is your unique id: " + unique_id); 
}) 

這具有需要用戶授權

實施例的缺點:http://jsfiddle.net/aJsL9/1/

+0

Persona在引擎蓋下設置了一個cookie,所以就像在OP域中使用cookie一樣。 – 2013-05-06 17:14:00

+0

你是對的,這裏沒有魔術發生。太糟糕了。 – wycleffsean 2013-05-06 18:33:25

1

如何可以生成每個客戶端的唯一指紋?

簡短的回答是,你不能。爲每個客戶做這件事是不可能的。您可以使用客戶端的invasive profiling關閉,但在90-95%的情況下,您可能只會獲得唯一的標識符。

我不想保存在Cookie或存儲上。

是否有你不想存儲數據客戶端的原因?如果你告訴我們你想達到的目標,那麼也許我們可以建議一個更好的方法來解決問題。

+0

原因是最有可能指紋客戶端用谷歌通用analitics來解決歐盟cookie的法律:) – Putr 2013-07-13 17:23:43