漏洞說明
在用戶進入登錄頁面,但還未登錄時,會產生一個session,用戶輸入信息,登錄以後,session的id沒有改變,也就是說沒有建立新session,原來的session沒有被銷燬, 可以繼續使用,黑客可利用此漏洞竊取或操縱客戶會話和cookie,用於模仿合法用戶,從而能夠以該用戶身份查看或變更用戶記錄以及執行事務。
簡單的說,就是登錄前後的JSESSIONID沒有變化。
修復方案
核心思想就是:登錄成功後始終生成新的會話。在登陸界面後增加下面一段代碼,強制讓系統session過期。
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//獲取cookie
cookie.setMaxAge(0);//讓cookie過期 ;
注意這段話要放在登錄頁面(例如index.jsp)的最後面,否則將會報錯。另外需要注意的是,重啓瀏覽器後首次訪問門戶的時候是沒有cookie的,所以要進行判斷,避免空指針異常。在項目中具體使用如下,如在index.jsp的最後面:
<%
if (登錄錯誤碼不爲空) {
//給出登錄錯誤提示
}
else {
//登陸成功,使Cookie更新,注意重啓瀏覽器後首次訪問門戶還沒有cookie
session.invalidate();
if(request.getCookies()!=null && request.getCookies().length > 0) {
Cookie cookie = request.getCookies()[0];
cookie.setMaxAge(0);
}
}
%>