如何在PHP中创建唯一的用户指纹

时间:2010-11-03 08:29:04

标签: php statistics user-agent identifier fingerprint

在PHP中生成用户唯一性的'指纹'的最佳方法是什么?

例如:

  1. 我可以使用用户的IP地址 然而,作为'指纹',那里 可以是同一IP上的多个其他用户
  2. 我可以 使用用户的IP +用户代理作为 然而,'指纹'是单个用户 可以简单地从safari换成 firefox又被视为独一无二的
  3. 理想情况下,指纹会标记“机器”而不是浏览器或“ip”,但我无法想到这是如何实现的。

    了解您如何唯一识别用户的想法/建议,以及您的方法有哪些优点/缺点。

5 个答案:

答案 0 :(得分:13)

该网站几乎涵盖了您可以用来通过浏览器区分个人的所有信息。

https://panopticlick.eff.org/

JavaScript,Java和Flash帮助很大。

答案 1 :(得分:10)

最简单,最好的方法:使用phps session-management - 每个客户端都有一个id,存储在cookie中(如果已启用)或在每个链接和表单上作为get-variable给出。 (或者你可以自己设置一个cookie)。但是:这只是浏览器的“指纹” - 如果用户更改了浏览器,删除了他的cookie或其他任何内容,则无法识别它。

通过ip识别每个客户端通常是一个坏主意,不会起作用。使用相同路由器的客户端将具有相同的IP - 通过代理池连接的客户端可能在每次加载页面时都有另一个ip。

如果您需要一个无法由客户端轻松操作的解决方案,请尝试使用客户端浏览器支持的所有内容进行以下组合,并在每个页面加载时进行比较:< / p>

  • “普通”HTTP Cookie
  • 本地共享对象(Flash Cookie)
  • 使用HTML5 Canvas标记将Cookie存储在自动生成的强制缓存PNG的RGB值中,以便读取像素(Cookie)
  • 存储Cookie并读取网络历史记录
  • 在HTTP ETag中存储Cookie
  • Internet Explorer userData storage
  • HTML5会话存储
  • HTML5本地存储
  • HTML5全球存储
  • 通过SQLite进行HTML5数据库存储

有一个名为evercookie的解决方案可以实现所有这些

答案 2 :(得分:3)

还有其他需要考虑的因素,用户的公共IP地址也会在每次页面加载时发生变化。
有多个组织在路由器中切换公共IP以平衡流量。

答案 3 :(得分:2)

无法保证实现100%的可靠性,但结合一些常用方法可以为您提供有意义的结果

  • 用户通常不会切换浏览器。算法中的过度复杂化只是为了达到工程完善,这是不值得的。
  • 如果您可以预期来自同一IP的多个用户,您肯定属于前100个网站。不要把它当作个人,但你不是那么受欢迎。

采取可行的最简单的路线,并在必要时随时调整。

答案 4 :(得分:0)

我有三台不同的电脑,各种手持设备,其中很多都安装了不同的浏览器。我在家里互换使用所有这些,把它们带到我的其他地方,基本上,在各种IP地址上。我想要指出的是,如果你的目标是封锁一个人,那么指纹浏览器或机器就不会是万无一失的。

我建议你采取不同的方法。判断基于您可用的不确定信息,表明您的被禁用户的身份(相同的IP或相同的用户代理,如果它是一个不常见的或一些javascript浏览器指纹识别方法,如可用的字体,可用的插件,非标准窗口大小等)并要求那些可疑访问者进行更高级别的身份验证 - 例如oauth与Facebook,Google +或Twitter。然后,您可以查看该社交媒体帐户是真实的还是仅为了规避而创建。还有电话验证API,以防您的用户群不具备社交媒体知识,并且取决于用户不会规避禁止的价值。