通过RESTAPI实现忘记密码功能的最佳实践
我试图通过发送重置密码的链接,即向注册用户发送带有一次性令牌的电子邮件,找到忘记密码功能的最佳实践。令牌将存储在数据库中,当用户单击链接时,我们检查令牌并允许用户设置新密码 设计忘记密码功能时的最佳实践-通过RESTAPI实现忘记密码功能的最佳实践,rest,authentication,restful-authentication,Rest,Authentication,Restful Authentication,我试图通过发送重置密码的链接,即向注册用户发送带有一次性令牌的电子邮件,找到忘记密码功能的最佳实践。令牌将存储在数据库中,当用户单击链接时,我们检查令牌并允许用户设置新密码 设计忘记密码功能时的最佳实践- 令牌必须是不可预测的,这是通过 不是基于时间戳或值的“真”随机码 比如用户id 与密码一样,在将令牌存储到中之前,应该对其进行哈希处理 数据库。这使得它们对攻击者毫无用处,即使 数据库被偷了 复位链路最好短一些,以避免出现故障 向客户端发送电子邮件,并且仅包含安全字符0-9 A-Z A-Z
- 令牌必须是不可预测的,这是通过 不是基于时间戳或值的“真”随机码 比如用户id
- 与密码一样,在将令牌存储到中之前,应该对其进行哈希处理 数据库。这使得它们对攻击者毫无用处,即使 数据库被偷了
- 复位链路最好短一些,以避免出现故障 向客户端发送电子邮件,并且仅包含安全字符0-9 A-Z A-Z (base62编码)
- 令牌应在一位数小时内有一个过期时间
- 在用户完成操作后,应将令牌标记为已使用 已成功设置新密码
- 当用户更改其密码或请求其他密码时 重置、过期所有已与其帐户关联的令牌
我还看到了一些其他做法:
- 检查用户是否与触发重置密码请求的计算机/浏览器/IP位于同一计算机/浏览器/IP上(除非由管理员/系统启动)
- 利率限制可以为帐户生成的重置令牌数
还应该注意的是,最佳实践通常是使用一个已建立的库,而不是发明自己的机制,因为太多的事情可能会被忽略。我也有同样的问题,并找到了答案。 我还想补充几点:
+1用于使用已建立的库。生活和呼吸安全感的人会犯错误。如果你不这样做,你的情况会更糟,而且你会有一套更小的白帽子来找到它们。你能推荐任何库与python social auth和Django Rest framework一起使用吗?似乎有这样的库,但我对python/Django不太了解,不能说它是最好的。你可以试着在slant.co或其他网站上询问(因为“什么是最好的X”对于SO来说是很离题的)。