使用javascript生成客户端的指纹

时间:2013-05-06 15:42:14

标签: javascript unique

如何为每个客户生成唯一的指纹?

我知道必须使用navigator对象,但navigator.battery等某些属性无法在此方法中使用。

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

如何使用JavaScript和没有cookie为每个用户生成正确的唯一指纹。

还必须包含跨平台和旧浏览器。

我需要navigator.X

支持的跨浏览器列表

注意: 我不想生成随机哈希。我想为每个用户生成系统基础哈希,我不想保存在Cookie或存储上。

3 个答案:

答案 0 :(得分:1)

在不使用cookie的情况下保持会话的最简单方法是将唯一的哈希值(可能是UUID或类似的东西)附加到页面中的URL作为get参数:

/my/fancy/url

变为

/my/fancy/url?HASHCODE

每当服务器收到请求时,它会捕获HASHCODE(如果存在),否则它会生成一个,然后将其附加到服务页面上的所有链接。

请注意,用户可以操作HASHCODE,在设计应用程序时应考虑到这一点。

无论如何,请注意它在花式网址时代非常丑陋。另请注意,用户跟踪是一个微妙的主题,如果您未在服务条款中正确声明,则可能会遇到法律问题。

编辑:您无法跟踪多个网站上的人,而不使用其任何变体(闪存,会话存储等)中的Cookie以及网站之间共享的域。没办法,你不能从一个域设置一个变量或cookie,并在任何体面的浏览器中从另一个域访问它,否则这将是一个很大的安全漏洞。

编辑:Panopticlick不能像你建议的那样用作跟踪方法,因为它基于统计匹配而且也非常糟糕(尝试从美国境外浏览https://panopticlick.eff.org/或刚刚发布Chrome / Firefox更新)。这是一个很好的证明概念,但没有任何东西可以用于此目的。此外,您需要大量样本才能获得统计相关的结果。

编辑:识别能力的浏览器指纹很弱:许多浏览器都是自动更新(如Chrome或Firefox),官方构建很少(20?40?如果算上Linux发行版编译的话可能多一点),所以你会使用相同的用户代理查找一致的用户部分。除此之外,还有一些具有类似配置的消费者电脑。

答案 1 :(得分: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/

答案 2 :(得分:1)

  

如何为每个客户生成唯一的指纹?

简短的回答是,你做不到。每个客户都无法做到这一点。您可以使用客户端的invasive profiling来结束,但是您可能只会在大约90-95%的情况下获得唯一标识符。

  

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

您是否有理由不想存储数据客户端?如果你告诉我们你想要实现的目标,那么也许我们可以建议一个更好的方法来解决问题。