【问题标题】:generate fingerprint of client using javascript使用javascript生成客户端指纹
【发布时间】:2013-05-06 15:42:14
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 您的意思是唯一地识别冲浪用户,即使他/她删除了 cookie 等?
  • @esseks 问题已更新。见注释。
  • 请改写问题,我不明白你在问什么。您的意思是生成一个哈希来标识用户代理 + 屏幕大小 + 等的组合,并在不使用 cookie 的情况下将其保留在所有请求中?
  • @esseks 是的。正确的问题,如果有任何模棱两可
  • 这是为了跟踪用户,还是例如根据特定功能(屏幕宽度...)为网站的不同版本提供服务?

标签: javascript unique


【解决方案1】:

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

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

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

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

【讨论】:

  • 原因很可能是对客户端进行指纹识别,以便与谷歌通用分析一起使用以绕过欧盟 cookie 法:)
【解决方案2】:

可能值得研究的一条途径是使用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/

【讨论】:

  • Persona 在后台设置了一个 cookie,因此就像在 OP 的域上使用 cookie。
【解决方案3】:

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

/my/fancy/url

变成

/my/fancy/url?HASHCODE

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

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

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

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

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

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

【讨论】:

  • 这当然可以,但是每次用户开始新会话时指纹都会有所不同
  • 由于他不想使用cookies,所以根本没有机会跨会话保留ID。
  • 不只是使用 javascript
猜你喜欢
  • 1970-01-01
  • 2017-10-02
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
相关资源
最近更新 更多