2013-05-06 98 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