我正在开发一个应用程序,将允许用户存储和加密信息,其中一些可能是敏感的。最近问题出现了“如果用户丢失密码怎么办?”目前无法在此应用程序中恢复丢失的密码。我想避免让应用程序发送任何信息给我的服务器以解决隐私问题。我想可能会设置一种方法,通过在用户通过电子邮件请求的用户名和密码字段中添加特定短语来重置登录信息。但是我不确定这是否是一个好主意。有更好的方法来完成这个吗?安全的方法来重置登录帐户
回答
最安全的方式来处理密码重置很可能使用重置令牌。每当用户请求重置密码时,您都会创建一个有效时间为15分钟或直至使用的新令牌。然后,您将链接发送到用户的电子邮件,其链接看起来像website.tld/reset?user=username&token=aRandomToken
。在重置页面上,用户可以选择一个新的密码。这样,您就不必处理创建以纯文本向用户发送的随机密码。更安全的方法是散列用户,因此参数user
将是散列,然后用户必须在重置页面上输入其用户名。这样,带链接的黑客就不能只看网址,但实际上需要知道用户名。
为了方便起见,实现可能看起来像:
var reset = new PasswordReset;
reset.user = realUsername;
reset.token = md5(randString(5) + date('Y-m-d H:i:s');
reset.save();
var url = 'website.tld/reset?user=' + md5(realUsername) + '&token=' + reset.token;
// send an email to the user with the url
谢谢您的输入Phroggyy。这听起来像我有很多工作在我面前。就这样,我知道如果我得到了这个理想的逻辑是正确的。在设备上,我会散列用户名:然后如果用户忘记密码,则散列用户名将被发送到网页进行检查。该网页要求提供用户名,将其散列,然后检查以查看散列是否匹配?如果匹配,用户将获得将解锁应用程序的重置令牌。我错过了什么吗? –
我不明白你为什么要散列用户名的客户端。基本上,用户在请求重置密码时输入用户名,然后生成前面描述的表单的URL,其中'user'参数是哈希用户名。然后让用户在恢复时再次输入用户名,然后检查URL中的哈希值是否与哈希用户名 – Phroggyy
相匹配我在考虑为了使程序和网站具有相同的哈希值,客户第一。显然情况并非如此。我会继续前进,并将其标记为已回答,但似乎我有一些研究工作要做。 –
- 1. 帐户的多种登录方法
- 2. 帐户无法登录Xcode?
- 3. 来宾帐户的登录挂钩mac
- 4. 这种验证/登录用户的方法是否安全?
- 5. 如何使此登录/重定向方法更安全
- 6. 外部登录帐户与本地登录帐户
- 7. 用户登录的安全权限
- 8. 最安全的用户登录系统
- 9. 无法通过使用DocuSign沙箱帐户登录来使用CoSign Api登录
- 10. 安全登录php
- 11. Wordpress登录安全
- 12. 重置Meteor帐户密码后禁用登录 - 密码
- 13. SQL Server:安全性用户登录
- 14. PHP安全会话和用户登录
- 15. 显示登录用户弹簧安全
- 16. PHP安全登录 - 客户端选项?
- 17. 弹簧安全错误登录用户
- 18. 春季安全用户请求登录
- 19. 多重身份+单点登录安全
- 20. Javascript Facebook登录 - 什么是最安全的登录方式?
- 21. 检测登录用户在Facebook的帐户套件(安卓)
- 22. 保持帐户登录
- 23. 登录到Gmail帐户
- 24. 使用Google帐户登录
- 25. 404寻找〜/帐户/登录
- 26. 远程登录Facebook帐户
- 27. 帐户,Facebook登录(IOS)
- 28. 设置登录SESSION数据 - 安全性?
- 29. facebook安全警告,而用户已启用安全登录 - iPhone
- 30. 只在php上重定向非登录用户是否安全?
你为什么不发一个临时密码,给用户的电子邮件? –