看好你的门-确保验证机制的安全(5)-防止滥用密码修改和密码找回功能

时间:2021-10-27 20:02:02

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

1、 前提

执行安全的验证机制,不仅仅要同时满足几个关键安全目标,许多的时候也需要牺牲其他目标。比如易用性、成本、还有功能。

2、 防止滥用密码修改的基本要求

一些基本要求,写下来,以后也可以参考。
1. 加一个简单图片验证码,基本确保是人在操作,而不是机器;
2. 只能从已经通过验证的会话中访问该功能;
3. 不要以任何方式直接提供用户名,也不要使用隐藏表单字段或者cookie提供用户名;
4. 为了防止攻击者通过会话劫持漏洞、跨站点脚本,或者是忘记关闭的页面获得未授权访问,应该要求用户重新输入现有密码;
5. 为了防止输入错误,新密码要输入两次,顺便校验两次密码是否一致;
6. 如果是重要的系统,多次使用失败的使用密码修改功能,很有可能被攻击;

3、 防止滥用“密码找回”的基本要求

密码找回可能是现在最容易出现漏洞的地方,一些基本要求,写下来,以后也可以参考。
 加一个简单图片验证码,基本确保是人在操作,而不是机器;
 当用户遗忘密码的时候,需要重要的系统,最好是通过非常规的方式完成密码找回,比如给呼叫中心打电话;通过发送传统邮件提供最新的验证信息;或者自动冻结一段时间;
 短信、邮件等方式都有可能造成漏洞,但是这个好像是现代互联网经济的基石,如果手机掉了,那就自求多福吧….
 不要使用任何的密码“暗示”,攻击者可以利用明显的暗示发动攻击;
 不要以任何方式直接提供用户名,也不要使用隐藏表单字段或者cookie提供用户名;
 找回密码的问题最好有足够的随机性,确保攻击者无法轻易猜测出来,但是… 很多的问题,不是黑和白,而是平衡,是灰色…
 最终,用户通过重重考验,完成了密码找回,一般是给用户发送一封重新激活URL的电子邮件;即使到了这一步,也不要透露用户以前的密码等信息;如果是生成一个新密码通过短信发给用户,也要确保这给新密码足够随机,避免让攻击者猜测到;