首页 > 解决方案 > 基于电子邮件的用户注册的安全最佳实践?

问题描述

我有一个网站,想注册新用户。注册流程如下:

  1. 用户输入电子邮件地址,点击“注册”
  2. 电子邮件地址被发送到服务器
  3. 服务器生成一个注册码,存储一个散列版本
  4. 服务器发送一封包含链接的电子邮件: confirm?code=<reg_code>
  5. 用户检查电子邮件,点击链接
  6. 服务器收到请求,确认代码的有效性
  7. 服务器将电子邮件地址存储为用户 ID
  8. 服务器发出令牌,存储令牌,使用令牌发送响应
  9. 用户的浏览器将令牌存储为 cookie
  10. Cookie 在后续请求中用作身份验证的 Bearer 令牌。

我想知道是否有任何方法可以提高这种方法的安全性。以下是一些注意事项:

在第 4 步中,电子邮件可以包含指向“代码提交”页面的链接,而不是提供链接confirm?code=<reg_code>,该页面显示“请在此处剪切并粘贴电子邮件中的代码,然后单击提交”。这样,javascript 可以获取先前在步骤 1 中生成和存储的会话 cookie。然后,服务器可以验证请求之间的会话 cookie 是否匹配。

在用户点击原始电子邮件链接后,系统可能会要求第二因素确认。

似乎带有会话 ID 检查的手动剪切和粘贴处理了被盗电子邮件的情况,因为这会使会话 ID 检查失败。

而且,2FA 要求黑客入侵第二个频道,或窃取设备。这两种措施似乎都非常安全。

然而,手动剪切和粘贴对用户来说很繁重,而 2FA 很烦人,因为它必须向用户询问电话号码或安装一些身份验证器应用程序。

还有其他方法吗?

标签: securityoauth-2.0csrf

解决方案


推荐阅读