安全漏洞问题7:失效的身份认证和会话管理
1.1. 漏洞描述
应用程序的功能一般包含权限管理和会话管理,但是由于应用程序设计不当,让攻击者可以窃取到密码、密钥、session tokens等信息,进而冒充合法用户身份,获取敏感信息或者进行恶意操作。
1.2. 漏洞危害
利用不安全的权限管理和会话管理设计,恶意用户可能会窃取或操纵用户会话和 cookie,进而模仿合法用户,一般来说,可能造成以下危害:
窃取用户凭证和会话信息
恶意用户冒充用户身份查看或者变更记录,甚至执行事务
访问未授权的页面和资源
执行超越权限操作
1.3. 解决方案
始终生成新的会话,供用户成功认证时登录。
代码示例如下:
//Example 1:用户登陆成功生成新ID
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//获取cookie
cookie.setMaxAge(0);//让cookie过期
用户再输入信息登录时,就会产生一个新的session了。
防止用户操纵会话标识。
具体措施如下:
用户密码强度(普通-6位以上;重要-8位以上;极其重要:使用多种验证方式)
不使用简单或可预期的密码恢复问题
登录页面最好加密处理;登录出错时不给太多的提示,使用统一的出错提示;登录验证成功后更换Session ID
第一次登录强制修改密码;对多次登录失败的帐号进行短时锁定;设置会话闲置超时。
提供用户注销退出功能,用户关闭浏览器或者注销时,删除用户Session
使用128位以上具备随机性的SessionID,不在URL中显示Session ID
保护Cookie
在应用程序中为Cookie设置安全属性:Secure flag和HttpOnly flag。