什么是在 PHP 中生成用户唯一性“指纹”的最佳方式?
例如:
- 我可以使用用户的 IP 地址作为“指纹”,但是在同一IP上可能会有多个其他用户
- 我可以使用用户的 IP + 用户代理作为“指纹”,但是单个用户可以简单地从Safari切换到Firefox,再次被视为唯一
理想情况下,“指纹”应标记“机器”,而不是浏览器或“IP”,但我想不出如何实现这一点。
欢迎提出您独特识别用户的方法/建议,并介绍您的方法的优缺点。
什么是在 PHP 中生成用户唯一性“指纹”的最佳方式?
例如:
理想情况下,“指纹”应标记“机器”,而不是浏览器或“IP”,但我想不出如何实现这一点。
欢迎提出您独特识别用户的方法/建议,并介绍您的方法的优缺点。
通过IP地址识别每个客户端通常是不可行的,而且不起作用。使用相同路由器的客户端将具有相同的IP地址——通过代理池连接的客户端可能会在每个页面加载时具有另一个IP地址。
如果您需要一种无法轻易被客户端操纵的解决方案,请尝试结合以下所有支持客户端浏览器的内容,并在每次页面加载时进行比较:
有一种解决方案叫做evercookie,它实现了所有这些内容。
还有一件事情需要考虑,用户的公共IP地址也可能在每次页面加载时发生变化。
有多个组织将公共IP在路由器中切换以平衡流量。
我有三台不同的电脑,各种手持设备,并且它们中的许多都安装了不同的浏览器。我在家里交替使用它们并带到其他地方,所以基本上是在不同的IP地址下使用。我的意思是,如果你的目标是阻止一个人,那么对浏览器或机器进行指纹识别永远不会是绝对可靠的。
我建议你采取不同的方法。根据你可用的不确定信息来判断被禁用户的身份(相同的IP或相同的用户代理,如果它是不常见的,否则一些JavaScript浏览器指纹识别方法,如可用字体、可用插件、非标准窗口大小等),并要求这些可疑访问者提供更高级别的身份验证 - 例如使用Facebook、Google+或Twitter的OAuth。然后,您可以查看该社交媒体帐户是否真实或仅为规避而创建。如果您的用户群体不熟悉社交媒体,还有电话验证API可用,具体取决于您的用户不规避封禁的价值程度。
md5(implode('',$_SERVER));
- Shea