有一段时间没有上CSDN了,今天看到有好几个网友问我“会话标示未更新问题”,以下是我的解决办法。
我的系统在做AppScan安全扫描时,爆出一个高危漏洞:会话标识未更新。提供的解决办法是,在用户登录时始终使用新的会话。
我仔细查看了我的系统。原来在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说还是以前的那个session(事实上session也确实不会改变,因为没有建立新session,原来的session也没有被销毁)。
后来我做了如下改变。在我的登录servlet里面将用户刚进入登录页面的那个session用invalidate()销毁掉,在用户信息匹配成功后,再建立一个新session,将用户信息放到session中去。
本来以为这种做法应该可以解决问题了,但是再扫描发现问题还存在。再一查看,发现新建立的session与原来被销毁的session的id居然还是一样的。真是搞不懂了!
系统背景:j2ee,jboss
以下是我的登录servlet的代码:
···
HttpSession session = request.getSession(false);
System.out.println(session.getId());
if(session!=null){
session.invalidate();
}
/***接下来是对用户进行认证的代码***/
···
···
/***用户认证代码结束***/