1. 程式人生 > >會話標示未更新解決方案

會話標示未更新解決方案

會話標示未更新

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

會話標示未更新解決方案