使用HOTP在PHP中实现双因素身份验证

时间:2014-04-12 11:46:11

标签: php session authentication two-factor-authentication

目前,我正在使用双因素身份验证,并将随机的6位数代码作为第二个因素,通过短信或电子邮件发送。 我现在想通过使用HOTP标准来加强这一点。并找到了nice class看起来非常整洁。

但我正在考虑实施和最佳实践,在哪里存储第二个因素以及检查它的方法。 这是我建议的流程:

  • 用户输入首次身份验证:用户名+密码
  • 成功时会话行被添加到session - 表中;以及使用上述类生成的OTP。并通过电子邮件/短信发送给用户。
  • Page reload
  • 会话可用,但行中仍有OTP,因此会显示一个表单以输入第二个因素。
  • 正在验证第二因素(三次尝试,之后整个会话被撤销)
  • 成功后,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))

生成的32位字符串

0 个答案:

没有答案