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());
}
}
原文地址:http://blog.51cto.com/116833/2113410
时间: 2024-11-05 23:22:17