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());
}
}