什么是针对唯一设备的最佳php登录系统逻辑?

时间:2019-03-01 11:34:47

标签: php ajax database cookies login

我正在从事一个重要的项目,该项目要求登录身份验证具有高度的安全性。 compay的经理告诉我,他希望允许客户仅在1台设备(PC,台式机或手机)上登录,以便即使该设备将电子邮件和密码提供给其他人,也只有该设备才能登录他的帐户,它不应允许其他人登录到他的帐户,因此每个客户端都有其自己的帐户,并且只能从一个设备访问。 我做了研究,但是在我的问题上没有找到很多答案,所以直到现在我还是这样做。

将它们注册到数据库后,我在用户表上添加了名为cookie的两列,该用户看到的第一件事是“仅访问您的设备”页面,他按下了按钮,并为该设备创建了一个cookie,同时也在数据库中,因此从那里我可以为用户建立唯一的连接。林问,现在有没有更安全的方法来为用户执行唯一登录,例如某些PC存储带有密钥的文件或其他某些无法通过清除历史记录数据删除的东西? 给我有关此部分的建议将非常有帮助...

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。我将从两个备选选项开始,您应该首先考虑两个选项(2FA和短期会议),然后在我的答案中稍后再进行硬件识别。

另一种选择是将唯一设备用作两因素身份验证(2FA)的一部分。使用电话号码,并在每次登录时向其电话发送一条包含一些随机数字的SMS消息(例如Twilio是这样做的一项不错的服务,但是如果您发送许多SMS消息,价格可能会很高)。这样一来,某人可以从自己选择​​的任何设备登录,但他们必须拥有该设备。要将登录限制为单个浮动设备,可以对其进行设置,以使单个帐户一次仅允许会话。这样,如果其他人设法(非常努力)登录,则另一台设备将被踢出。将帐户绑定到公司发行的电话并使用SMS意味着登录时几乎可以肯定该设备已被该人拥有。

另一个选择是将您的登录系统与实现U2FA或FIDO2协议的YubiKey或其他硬件密钥集成。支持这些设备需要直接或通过扩展支持浏览器。钥匙也很贵。

通过电子邮件发送2FA代码并使用Google Authenticator(应用程序)是另外两个不需要花钱的2FA选项。我在开源CubicleSoft单一登录(SSO)软件中都实现了这两种功能:

https://github.com/cubiclesoft/sso-server

我还建议您使用较短的会话超时时间(例如5分钟的浮动窗口)。只要浏览器选项卡处于打开状态,就向服务器发送定期的心跳信号以使会话保持活动状态(或不要求进行交互以使会话保持活动状态-这取决于应用程序)。关闭所有选项卡后,会话将终止,这要求用户再次登录。上面的SSO服务器产品还支持开箱即用的短会话管理。将2FA机制与短会话结合使用,可以减轻多个用户登录多个设备上的单个帐户的麻烦。

硬件出故障,人们在出现新的闪亮事物时购买了新硬件。在用户必须切换设备时,将身份验证绑定到特定的硬件很容易引起真正的头痛。

但是,如果您真的想将登录名绑定到单个设备,则应该以“ Web浏览器指纹识别”的一般方向查看。广告服务和分析行业一直在寻找做您所描述的方法的方法,以便他们可以在不依赖浏览器cookie的情况下准确地跟踪他们在网络上旅行时的情况,从而即使cookie / localStorage被删除,跟踪信息也可以保留。

该网站提到并演示了几种技术:

https://browserleaks.com/

另一种选择是使用附加的硬件设备ID:

http://cubicspot.blogspot.com/2019/01/hardware-fingerprinting-with-web-browser.html

手机和平板电脑几乎总是装有摄像头。笔记本电脑通常也是如此。台式电脑可能不会。

但是,如果您仅依赖于该API或任何其他特定的API,那么将来它可能会更改/中断。

注意事项:未经其明确许可,擅自做任何能唯一标识设备或用户的行为,可能违反GDPR和/或《 2018年加利福尼亚消费者隐私法》。如果您的雇主在欧盟或加利福尼亚开展业务,则您的雇主应咨询律师并将在这些区域设置中的用户使用您的登录系统。

相关问题