首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。
执行安全的验证机制,不仅仅要同时满足几个关键安全目标,许多的时候也需要牺牲其他目标。比如易用性、成本、还有功能。
一些基本要求,写下来,以后也可以参考。
1. 要确认完整的用户名和密码等信息;也就是说,要区分大小写,不过滤或者修改任何字符,不添加也不截断密码;
2. 应用程序要在处理验证信息的过程中,主动防御无法预料的时间。重要的是,如果系统无法通过正常的验证,那么这个默认的返回值就是“false”,不要把成功作为默认值;
3. 对验证登陆信息的核心代码要进行全面的代码审查(这一块经常没人做,大家都认为用户登陆是一个极其简单的工作;最重要的大门往往是团队中最没有经验的实习生在开发)
4. 如果应用程序支持用户伪装功能(也就叫做用户变更)功能,应该要严格控制这种功能,防止攻击者滥用他获得未授权的访问。因为这种功能极度危险,最好从面向公众的应用程序彻底删除,最多在CN2、DCN等内部网之间有限放开;
5. 和登录阶段进展和各种验证结果都应该保存在服务器端,不能传送给客户端或者让客户端读取;
6. 禁止用户多次提交一项登陆信息;禁止用户修改已经被确认的数据;
7. 任何一个登陆阶段,都要核实前面的阶段是否顺利完成,而不是信任referer等类似可以被擅改的情况;一旦发现前面的阶段没有完成,应该要立即将验证尝试标记为恶意尝试;
8. 如果为了进一步提升安全需要,可以在登陆过程中让用户回答一个随机变化的问题,尽量提升攻击者的难度;
9. 如果对某一个用户提出一个特定的问题,那么对该问题进行长期存储,对用户每一次的失败登陆都用这个问题,一直到用户正确回答为止。(避免攻击者便利题库或者类似情况)
原文地址:http://blog.csdn.net/ffm83/article/details/44170933