目前,我正在使用双因素身份验证,并将随机的6位数代码作为第二个因素,通过短信或电子邮件发送。 我现在想通过使用HOTP标准来加强这一点。并找到了nice class看起来非常整洁。
但我正在考虑实施和最佳实践,在哪里存储第二个因素以及检查它的方法。 这是我建议的流程:
session
- 表中;以及使用上述类生成的OTP。并通过电子邮件/短信发送给用户。otp_done
- 字段将更新为true。otp_done
= true,因此显示应用程序。 考虑:
如果会话被劫持(虽然是随机且唯一的),他们将获得完全访问权限。将otp存储在会话中并在每次加载页面时验证它是否更好。但不知何故,这听起来有点儿。并且它只增加了6位数的随机性。
是否有实施这些OTP的标准化方法?
我的实施是好还是存在安全漏洞?
应该使用key
来生成OTP? HOTP标准是否为同一个密钥返回不同的otp?
sessions-table
id (int) | sessionid (str) | user (int) | otp (int|null) | otp_done (bool) | otp_tries (int)
Session_id是使用bin2hex(openssl_random_pseudo_bytes(32))