时间:2021-07-01 10:21:17 帮助过:44人阅读
关于邮箱找回密码,大概是什么思路实现
谢谢
你这个问题很简短,但是涉及的范围很广。
这里面会涉及到很多安全问题,稍有不慎就会有不安全因素。
首先,给你教科书级别的OWASP找回密码设计指南:
https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet
然后给你三篇乌云的文章,用别人的前车之鉴做参考,看看自己有没有类似的不安全设计:
密码找回逻辑漏洞总结:
http://drops.wooyun.org/web/5048
密码找回功能可能存在的问题
http://drops.wooyun.org/papers/287
密码找回功能可能存在的问题(补充)
http://drops.wooyun.org/web/3295
我先说下我的思路:
1.用户输入邮箱,去数据库查询 该邮箱是否存在
2.如果存在,立即生成一个路由连接,比如 www.a.com/lost/passpord/key/bac.html
3.key=>bac bac 是某种算出生成的唯一哈希值,放在redis 等缓存系统中,24小时,或者2小时
内有效,让将这个连接发送到该邮箱中,用户点击链接,执行找回密码
4.在找回密码的时候,第一步验证 redis缓存中是否存在该key 哈希值,再执行update重置密码即可.
一般找回密码都是有时效,所以时间是少不了的,然后需要修改的用户也必须包含在里面。
随便找个带密钥的可逆加密函数处理这两个信息生成一个token就可以了。
我的一个思路不需要用到redis和数据库,完完全全不需要独立存储用户找回密码的hash。
楼上有人说的办法在大型业务中,还得搞几台独立的redis服务器啊,有点烧钱。
我的思路是
先用`
md5(用户邮箱,当前时间戳,私钥)+用户邮箱明文,当前时间戳明文
点开这个链接之后先判断时间戳合当前时间之间是否超时。没超时则再次用```
md5(用户邮箱,当前时间戳,私钥)
整个过程由于私钥都在服务端脚本,因此只要它不被泄露,这个系统就是安全的 整个过程理论上没什么问题。
楼上都说的比较好 楼主可以总结一下