首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。
1、 前提
执行安全的验证机制,不仅仅要同时满足几个关键安全目标,许多的时候也需要牺牲其他目标。比如易用性、成本、还有功能。
2、 防止滥用密码修改的基本要求
一些基本要求,写下来,以后也可以参考。
1. 加一个简单图片验证码,基本确保是人在操作,而不是机器;
2. 只能从已经通过验证的会话中访问该功能;
3. 不要以任何方式直接提供用户名,也不要使用隐藏表单字段或者cookie提供用户名;
4. 为了防止攻击者通过会话劫持漏洞、跨站点脚本,或者是忘记关闭的页面获得未授权访问,应该要求用户重新输入现有密码;
5. 为了防止输入错误,新密码要输入两次,顺便校验两次密码是否一致;
6. 如果是重要的系统,多次使用失败的使用密码修改功能,很有可能被攻击;
3、 防止滥用“密码找回”的基本要求
密码找回可能是现在最容易出现漏洞的地方,一些基本要求,写下来,以后也可以参考。
加一个简单图片验证码,基本确保是人在操作,而不是机器;
当用户遗忘密码的时候,需要重要的系统,最好是通过非常规的方式完成密码找回,比如给呼叫中心打电话;通过发送传统邮件提供最新的验证信息;或者自动冻结一段时间;
短信、邮件等方式都有可能造成漏洞,但是这个好像是现代互联网经济的基石,如果手机掉了,那就自求多福吧….
不要使用任何的密码“暗示”,攻击者可以利用明显的暗示发动攻击;
不要以任何方式直接提供用户名,也不要使用隐藏表单字段或者cookie提供用户名;
找回密码的问题最好有足够的随机性,确保攻击者无法轻易猜测出来,但是… 很多的问题,不是黑和白,而是平衡,是灰色…
最终,用户通过重重考验,完成了密码找回,一般是给用户发送一封重新激活URL的电子邮件;即使到了这一步,也不要透露用户以前的密码等信息;如果是生成一个新密码通过短信发给用户,也要确保这给新密码足够随机,避免让攻击者猜测到;