现在的论坛、社区等需要注册的地方都有个功能,就是找回密码,现在看看我总结的实现思路。
首先,用户通常用邮箱注册的账号,那么找回密码就是把密码发到它邮箱中去,就有以下几种流程:
第一种办法:
1.用户填写用户名和注册邮箱,回答找回密码问题
(我一直觉得找回密码问题没什么实际作用,加重了用户操作负担)
2.server将用户本来的密码发送到用户邮箱中
3.一般注册密码都是经过MD5加密存储在数据库中,这个加密算法几乎不可逆,那么如果需要发送给用户其原始密码,就需要有个字段记录用户的裸露密码,也就是未经加密的密码
这种办法,比较好实现,只需要将数据库对应字段的密码发送给用户就行了,但是密码加密就失去了本来的作用了,所以不太可用,可以偷懒用用。
第二种办法:
1.用户填写用户名和注册邮箱
2.server发送到用户邮箱一个链接
3.用户通过邮箱中的链接,进入修改密码页面,这个页面只需填写用户的用户名、注册邮箱和新的密码、确认密码即可
4.这个页面的链接是随机生成,通过重定向进入界面,并且链接在若干时长内有效(比如30分钟有效时间),也就是说,在server发送出去了用户的找回密码邮件之后,就开始计时,在30分钟之后,链接自动失效
5.而这个页面,如果没有找回密码邮件的请求,用户是永远无法访问得到的,因此用户也就根本看不到其他用户的这个页面,除非正在修改密码的用户,通过胡乱在浏览器的地址栏上写了一个地址,竟然访问到其他正在修改密码用户的这个页面,那这个用户中大奖的概率太高了,赶紧去买彩票吧……
这种办法在实现上来说,是较为复杂的,但是对于用户使用来说,是能让用户自我控制的方法。
第三种办法:
1.用户填写用户名、注册邮箱
2.server发送给用户一个随机的新密码,这个密码是server在接收到找回密码请求后生成,并且写入用户数据库中的
3.用户可以用这个密码登陆,修改自己的密码,也可以不改,直接用这个密码了。
总结,在以上三种办法中
第一种几乎没有使用的价值,是偷懒的办法
第二种感觉上有些不靠谱,但是从用户角度来说,可以自己控制自己的密码,体验相对友好
第三种整个流程来说是比较严密的,但是随机生成的密码对于用户来说增加了修改密码的操作负担,不过是目前找回密码中用的比较多的一种办法。
=================================================================================================================================
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
记密码功能的安全实现(邮件方式)
最近在做P2P网贷系统,由于对安全的要求比较高,因此做每一步都比较小心,考虑再三。
在做忘记密码功能时考虑到邮箱链接的安全性,去网上参考下别人的意见,查询后发现许多网站的这个功能都存在漏洞,如:
手机方式:http://www.wooyun.org/bugs/wooyun-2010-018055
邮件方式:http://www.2cto.com/Article/201305/215934.html
http://www.wooyun.org/bugs/wooyun-2013-017322
吓到了吧,所以任何小的功能稍加不注意,可能就是一个大的漏洞
我的解决方案:(有不同意见的可以马上喷):
1.存储数据库是必须的,先建数据库表用来存储每次发送的信息,表结构如下
编号:就是与某个用户进行关联,标注是哪个用户点击了忘记密码(在发送邮件前肯定有叫用户输入信息如用户名,邮箱地址),这样我们就能锁定该用户了
过期时间:就是设定邮件在多少时间内有效
随机md5值:是用来唯一标注邮件链接的,可以生成时间戳然后用md5进行加密
类型:用来区分不同的链接,看你自己的需要
2.用户点击忘记密码后,我们需要他们输入用户名,邮箱地址来进行用户的认证,如果认证正确则向该用户发送一封重置密码的链接邮件,并将信息存入到该表中:
如下:
3.用户点击后重置密码后,程序进行验证,通过vcode和email到记录表中进行查询,如果存在表示该链接有效,
如果验证正确了就显示重置密码页面,重置成功后将那个记录进行删除(也可以添加一个字段来标注用户点击链接的次数,控制超过几次后就将过期)
共 25 个关于本帖的回复 最后回复于 2012-7-31 00:02