在 PHP 中生成用户唯一性“指纹”的最佳方法是什么?
例如:
- 我可以使用用户的 IP 地址作为“指纹”,但是,同一 IP 上可能有多个其他用户
- 我可以使用用户的 IP + 用户代理作为“指纹”,但是,单个用户可以简单地从 safari 切换到 firefox,并再次被视为独一无二
理想情况下,指纹标记为“机器”而不是浏览器或“IP”,但我想不出这是如何实现的。
对您如何唯一识别用户以及您的方法有哪些优点/缺点的想法/建议持开放态度。
在 PHP 中生成用户唯一性“指纹”的最佳方法是什么?
例如:
理想情况下,指纹标记为“机器”而不是浏览器或“IP”,但我想不出这是如何实现的。
对您如何唯一识别用户以及您的方法有哪些优点/缺点的想法/建议持开放态度。
最简单和最好的方法:使用 phps会话管理- 每个客户端都有一个 ID,存储在 cookie 中(如果启用)或作为每个链接和表单的 get-variable 给出(或者你可以自己设置一个 cookie)。但是,这只会对浏览器进行“指纹识别”——如果用户更改了浏览器、删除了 cookie 或其他任何内容,您将无法再识别它。
通过 IP 地址识别每个客户端通常是个坏主意,而且不会奏效。使用相同路由器的客户端将具有相同的 IP 地址 - 通过代理池连接的客户端在每次页面加载时可能具有另一个 IP 地址。
如果您需要客户端无法轻松操作的解决方案,请尝试结合使用客户端浏览器支持的所有内容,并在每次页面加载时进行比较:
有一个名为evercookie的解决方案可以实现所有这些。
还有其他需要考虑的因素,用户的公共 IP 地址在每次页面加载时也会发生变化。
有多个组织在他们的路由器中切换公共 IP 以平衡流量。
无法保证实现 100% 的可靠性,但结合一些常用方法可以为您提供有意义的结果
采取最简单的可行路线,如果有必要,可以随着时间的推移进行调整。
我有三台不同的计算机,各种手持设备,其中许多都安装了不同的浏览器。我在家里交替使用所有这些,把它们带到其他地方,基本上,在各种 IP 地址上。我要指出的是,如果您的目标是阻止某人,那么为浏览器或机器指纹识别永远不会是万无一失的。
我建议你采取不同的方法。根据您提供的暗示您被禁止用户身份的不确定信息进行判断(相同 IP 或相同用户代理,如果它是不常见的,或者一些 javascript 浏览器指纹识别方法,例如可用字体、可用插件、非标准窗口大小等),并要求那些可疑访问者进行某种更高形式的身份验证——例如使用 Facebook、Google+ 或 Twitter 的 oauth。然后,您可以查看该社交媒体帐户是真实的还是只是为了规避而创建的。如果您的用户群不熟悉社交媒体,并且取决于用户不规避禁令对您的价值,还有电话验证 API。