security - 基于电子邮件的用户注册的安全最佳实践?
问题描述
我有一个网站,想注册新用户。注册流程如下:
- 用户输入电子邮件地址,点击“注册”
- 电子邮件地址被发送到服务器
- 服务器生成一个注册码,存储一个散列版本
- 服务器发送一封包含链接的电子邮件:
confirm?code=<reg_code>
- 用户检查电子邮件,点击链接
- 服务器收到请求,确认代码的有效性
- 服务器将电子邮件地址存储为用户 ID
- 服务器发出令牌,存储令牌,使用令牌发送响应
- 用户的浏览器将令牌存储为 cookie
- Cookie 在后续请求中用作身份验证的 Bearer 令牌。
我想知道是否有任何方法可以提高这种方法的安全性。以下是一些注意事项:
- 手动剪切和粘贴代码,带有会话 ID 检查
在第 4 步中,电子邮件可以包含指向“代码提交”页面的链接,而不是提供链接confirm?code=<reg_code>
,该页面显示“请在此处剪切并粘贴电子邮件中的代码,然后单击提交”。这样,javascript 可以获取先前在步骤 1 中生成和存储的会话 cookie。然后,服务器可以验证请求之间的会话 cookie 是否匹配。
- 2FA
在用户点击原始电子邮件链接后,系统可能会要求第二因素确认。
似乎带有会话 ID 检查的手动剪切和粘贴处理了被盗电子邮件的情况,因为这会使会话 ID 检查失败。
而且,2FA 要求黑客入侵第二个频道,或窃取设备。这两种措施似乎都非常安全。
然而,手动剪切和粘贴对用户来说很繁重,而 2FA 很烦人,因为它必须向用户询问电话号码或安装一些身份验证器应用程序。
还有其他方法吗?
解决方案
推荐阅读
- java - Windows内存管理和java
- r - ggplot2 的 scale_fill_gradient2 中的动态中点
- c# - 使用继承策略将类型实例转换为不同类型的实例
- uwp-xaml - 更改 NavigationView.MenuItemsSource 崩溃
- mysql - 在特定单元格中附加数据框
- python - 根据标题名称类型删除列
- r - 读取 GRIB2 文件时元数据丢失
- python - 如何将 spaCy NER 数据集格式转换为 Flair 格式?
- react-native - 在前台屏幕上更新全局状态时,即使屏幕在后台,也会调用 useFocusEffect 挂钩
- ansible - 在 Redhat Linux 8.1 上使用所有依赖项进行 Ansible 离线安装