当前位置: 代码迷 >> Java Web开发 >> 会话标识未更新有关问题
  详细解决方案

会话标识未更新有关问题

热度:9715   发布时间:2013-02-25 21:19:10.0
会话标识未更新问题
一个很纠结的问题:
我的系统在做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();
}
/***接下来是对用户进行认证的代码***/
···
···
/***用户认证代码结束***/
HttpSession session1 = request.getSession(true);
System.out.println(session1.getId());
session1.setAttribute("",***);


------解决方案--------------------------------------------------------
这个问题偶也纠结得很是纳闷
不过我这方法还不知行不行,因为领导还只是让我想想怎么解决

Java code
    Enumeration e = request.getParameterNames();    while (e.hasMoreElements()) {        String str = ((String) e.nextElement()).toLowerCase().replaceAll("[\\s]+", "");        if ("session".equals(str)) {            request.getSession().invalidate();            return new ActionForward("/main/P1.jsp");        } else if ("cookie".equals(str)) {            request.getSession().invalidate();            return new ActionForward("/main/P1.jsp");        } else if ("jsessionid".equals(str)) {            request.getSession().invalidate();            return new ActionForward("/main/P1.jsp");        } else if ("sessionid".equals(str)) {            request.getSession().invalidate();            return new ActionForward("/main/P1.jsp");        }    }
------解决方案--------------------------------------------------------
帮你顶吧。。。给点辛苦分啊
------解决方案--------------------------------------------------------
仅供参考!
HttpSession session1 = request.getSession(true);
session1.removeAttribute("loginname");
session1.invalidate();
request.getSession().removeAttribute("loginname");

String url ="/index.jsp";
request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + url);
------解决方案--------------------------------------------------------
同样的问题,我们公司找微软发信搞定。。。唉 不知道怎么解决~能力有限~
  相关解决方案