会话标示未更新解决方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了会话标示未更新解决方案相关的知识,希望对你有一定的参考价值。

JSF项目,用appscan检测,报“会话标示未更新”漏洞,漏洞详情:用户在登陆应用程序前后,其会话标识一样,未进行更新,从而可以窃取或操作客户会话和Cookie,进行查看、变更用户信息及执行事务等操作。

推理: 测试结果似乎指示存在脆弱性,因为“原始请求”和“响应”中的会话标识相同。这些标志应该已在响应中更新。

JSF页面在打开时,就会生成一个sessionid,登录后的sessionid未发生变化。
解决方案:
后台登陆方法,加入强行销毁session的代码,并重新生成新session。

代码转自:http://huangqiqing123.iteye.com/blog/2031455

/** 
 * 重置sessionid,原session中的数据自动转存到新session中 
 * @param request 
 */  
public static void reGenerateSessionId(HttpServletRequest request){  

    HttpSession session = request.getSession();  

    //首先将原session中的数据转移至一临时map中  
    Map<String,Object> tempMap = new HashMap();  
    Enumeration<String> sessionNames = session.getAttributeNames();  
    while(sessionNames.hasMoreElements()){  
        String sessionName = sessionNames.nextElement();  
        tempMap.put(sessionName, session.getAttribute(sessionName));  
    }  

    //注销原session,为的是重置sessionId  
    session.invalidate();  

    //将临时map中的数据转移至新session  
    session = request.getSession();  
    for(Map.Entry<String, Object> entry : tempMap.entrySet()){  
        session.setAttribute(entry.getKey(), entry.getValue());  
    }  
}  

以上是关于会话标示未更新解决方案的主要内容,如果未能解决你的问题,请参考以下文章

GitHub-更新数据

Laravel flash 或会话消息未过期 [未维护已更新]

小程序各种功能代码片段整理---持续更新

.NET C# 会话变量未在 Safari 浏览器中更新

VS2013未定义标示符

vs中能编译通过,但是会有红色下划线提示未定义标示符问题