如何为每个客户生成唯一的指纹?
我知道必须使用navigator
对象,但navigator.battery
等某些属性无法在此方法中使用。
// battery included and unique may change.
var uniqueHash = exampleHash(JSON.stringify(navigator));
如何使用JavaScript和没有cookie为每个用户生成正确的唯一指纹。
还必须包含跨平台和旧浏览器。
我需要navigator.X
注意: 我不想生成随机哈希。我想为每个用户生成系统基础哈希,我不想保存在Cookie或存储上。
答案 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);
})
这有需要用户授权的缺点
答案 2 :(得分:1)
如何为每个客户生成唯一的指纹?
简短的回答是,你做不到。每个客户都无法做到这一点。您可以使用客户端的invasive profiling来结束,但是您可能只会在大约90-95%的情况下获得唯一标识符。
我不想保存在Cookie或存储上。
您是否有理由不想存储数据客户端?如果你告诉我们你想要实现的目标,那么也许我们可以建议一个更好的方法来解决问题。