1

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

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

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

如何仅使用 JavaScript 且不使用 cookie 为每个用户生成正确的唯一指纹。

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

我需要支持的跨浏览器列表navigator.X

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

4

3 回答 3

2

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

简短的回答是你不能。不可能为每个客户都这样做。您可以使用客户端的侵入性分析来接近,但您可能只会在大约 90-95% 的情况下获得唯一标识符。

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

您是否有不想在客户端存储数据的原因?如果您告诉我们您想要达到的目标,那么也许我们可以建议一种更好的方法来解决问题。

于 2013-05-06T19:08:17.687 回答
1

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

/my/fancy/url

变成

/my/fancy/url?HASHCODE

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

请记住,用户可以操纵 HASHCODE,在设计应用程序时应考虑到这一点。

无论如何,请注意在花式 url 时代它是相当丑陋的。另请注意,用户跟踪是一个微妙的主题,如果您没有在 TOS 中正确声明,您可能会遇到法律问题。

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

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

编辑:浏览器指纹识别能力很弱:许多浏览器都在自动更新(如 Chrome 或 Firefox)并且官方构建的很少(20?40?如果算上 Linux 发行版编译的可能会更多),所以你会发现一个一致的具有相同用户代理的用户的一部分。补充说,有大量具有类似配置的消费类 PC。

于 2013-05-06T16:33:09.083 回答
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/

于 2013-05-06T17:09:54.630 回答