失效的身份认证和会话管理
1、原理
身份认证:最常见的是登录功能,往往是提交用户名和密码,在安全性要求更高的情况下,有防止密码暴力破解的验证码,基于客户端的证书,物理口令卡等等。
会话管理:HTTP本身是无状态的,利用会话管理机制来实现连接识别。身份认证的结果往往是获得一个令牌,通常放在cookie中,之后对用户身份的识别根据这个授权的令牌进行识别,而不需要每次都要登陆。
2、典型案例
案例1:机票预订应用程序支持URL重写,把会话ID放在URL里:
http://example.com/sale/saleitems;jsessionid=2P0OC2JNDLPSKHCJUN2JV?dest=Hawaii
该网站一个经过认证的用户希望让他朋友知道这个机票打折信息。他将上面链接通过邮件发给他朋友们,并不知道自己已经泄露了自己的会话ID。当他的朋友们使用上面的链接时,他们将会使用他的会话和信用卡。
案例2:应用程序超时设置不当。用户使用公共计算机访问网站。离开时,该用户没有点击退出,而是直接关闭浏览器。攻击者在一个小时后能使用相同浏览器通过身份认证。
案例3:内部或外部攻击者进入系统的密码数据库。存储在数据库中的用户密码没有被加密,所有用户的密码都被攻击者获得。
3、防范方法
- 强制使用一定复杂度的密码且加密存储,登录验证使用用户名、密码、后台验证码三者结合,验证码具有时效性,登录失败后的提示信息模糊化,不得提示具体是用户名错误还是密码错误。
- 登录后的接口均需要携带认证后的token方可正确访问,token具有时效性,超时将会失效,时效时长设置合理。
- 不需要认证的接口,也需要采用公司内部制定的token生成方法,前端工程师调用接口时携带,且前端代码必须被混淆。