Maison >développement back-end >tutoriel php >关于邮箱找回密码

关于邮箱找回密码

WBOY
WBOYoriginal
2016-07-06 13:52:381297parcourir

关于邮箱找回密码,大概是什么思路实现
谢谢

回复内容:

关于邮箱找回密码,大概是什么思路实现
谢谢

你这个问题很简短,但是涉及的范围很广。

这里面会涉及到很多安全问题,稍有不慎就会有不安全因素。

首先,给你教科书级别的OWASP找回密码设计指南:
https://www.owasp.org/index.php/Forgot_Password_Cheat_Sheet

然后给你三篇乌云的文章,用别人的前车之鉴做参考,看看自己有没有类似的不安全设计:

  1. 密码找回逻辑漏洞总结:
    http://drops.wooyun.org/web/5048

  2. 密码找回功能可能存在的问题
    http://drops.wooyun.org/papers/287

  3. 密码找回功能可能存在的问题(补充)
    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服务器啊,有点烧钱。

我的思路是

  1. 先用`
    md5(用户邮箱,当前时间戳,私钥)+用户邮箱明文,当前时间戳明文

<code>点开这个链接之后先判断时间戳合当前时间之间是否超时。没超时则再次用```
md5(用户邮箱,当前时间戳,私钥)</code>

整个过程由于私钥都在服务端脚本,因此只要它不被泄露,这个系统就是安全的 整个过程理论上没什么问题。

楼上都说的比较好 楼主可以总结一下

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn