在PHP中创建唯一用户指纹的方法

在PHP中创建唯一用户指纹的方法,php,statistics,user-agent,identifier,fingerprint,Php,Statistics,User Agent,Identifier,Fingerprint,在PHP中生成用户唯一性“指纹”的最佳方法是什么 例如: 我可以使用用户的IP地址 然而,作为“指纹”,有 可能是同一IP上的多个其他用户 我可以 将用户的IP+用户代理用作 然而,“指纹”是指单个用户 可以简单地从safari切换到 firefox和firefox再次被认为是独一无二的 理想情况下,指纹标记为“机器”,而不是浏览器或“ip”,但我想不出这是如何实现的 接受关于如何唯一地识别用户以及您的方法有哪些优点/缺点的想法/建议。最简单和最好的方法:使用phps-每个客户端都有一个ID,存

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

例如:

  • 我可以使用用户的IP地址 然而,作为“指纹”,有 可能是同一IP上的多个其他用户
  • 我可以 将用户的IP+用户代理用作 然而,“指纹”是指单个用户 可以简单地从safari切换到 firefox和firefox再次被认为是独一无二的
  • 理想情况下,指纹标记为“机器”,而不是浏览器或“ip”,但我想不出这是如何实现的


    接受关于如何唯一地识别用户以及您的方法有哪些优点/缺点的想法/建议。

    最简单和最好的方法:使用phps-每个客户端都有一个ID,存储在cookie(如果启用)中,或者在每个链接和表单上都有一个get变量(或者您可以自己设置cookie)。但是,这只是浏览器的“指纹”——如果用户更改浏览器、删除cookie或其他任何东西,你就无法再识别它了

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

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

    • “正常”HTTP Cookies
    • 本地共享对象(Flash Cookie)
    • 将Cookie存储在自动生成的RGB值中,使用HTML5画布标记强制缓存PNG读取像素(Cookie)
    • 在Web历史记录中存储cookie和读取cookie
    • 在HTTP ETag中存储cookie
    • Internet Explorer用户数据存储
    • HTML5会话存储
    • HTML5本地存储
    • HTML5全局存储
    • 通过SQLite存储HTML5数据库

    有一个名为的解决方案实现了所有这些。

    实现100%的可靠性并不能保证,但结合一些常用方法可以给您带来有意义的结果

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

    采取最简单的可行路线,如果有必要,可以随时间调整。

    还有其他需要考虑的因素,用户的公共IP地址也可以在每次页面加载时更改。

    有多个组织在路由器中切换公共IP以平衡流量。

    我有三台不同的计算机、各种手持设备,其中许多都安装了不同的浏览器。我在家里可以互换地使用它们,把它们带到其他地方,基本上,在不同的IP地址上。我想指出的是,如果你的目标是阻止一个人,那么对浏览器或机器进行指纹识别永远不会是万无一失的


    我建议你采取不同的方法。根据您现有的不确定信息判断您的被禁止用户的身份(相同的IP或相同的用户代理,如果是不常见的,或者一些javascript浏览器指纹识别方法,如可用字体、可用插件、非标准窗口大小等)并要求这些可疑访客进行更高形式的身份验证,如使用Facebook、Google+或Twitter的oauth。然后你可以看看这个社交媒体账户是真实的还是仅仅为了规避风险而创建的。还有一些电话验证API,以防您的用户群不熟悉社交媒体,这取决于用户不绕过禁令对您的价值。

    我完全不同意您的第二点-取决于他的网站类型,您可以很快获得多个具有相同ip的用户。假设他的网站是一个浏览器游戏:所有的学生都互相告诉对方,朋友们一起玩,在信息学课上,他们有互联网,他们都在学校网络上玩这个游戏(意思是:相同的ip,但开发者必须找出是不是同一台电脑才能知道这不是一个作弊的多帐号)@oezi这样的浏览器游戏将与会话ID相处得很好。事实上,我只是想举一个例子,说明为什么即使在小型网站上也不能依赖ip地址。是的,我希望我在我的网站上很受欢迎。也就是说,我的这个小web应用程序运行在一个很小的VPS上(80Mb内存,是的!),所以不需要花费太多的时间来过载。我需要确保每个用户都能得到公平的使用。@因此,由于资源太少,我会专注于我的应用程序的核心,而不是以后可以添加的细节。您链接到了PHP手册的德语翻译。。。这是同一个英文页面:——此外,使用Evercookie或任何其他方式在客户端上存储数据,明确目的是使其难以删除,这在大多数国家可能是非法的。该网站涵盖了几乎所有可以通过浏览器区分个人的信息。JavaScript、Java和Flash帮助很大。这个老问题是:
    md5(内爆(“”,$\u服务器))
    @Shea是一条有用的评论,但指纹不会改变(隐喻地说),而且$\u服务器中会有与用户无关的变化@Shea我不会像现在一样使用你建议的技巧,因为每个访问的网页上的指纹都会改变。但也许可以改进。@Calimero是的,你是对的。它很有用,但需要过滤掉某些键。