本次針對 Appscan漏洞 會話標識未更新 進行總結,如下:
1. 會話標識未更新
1.1、攻擊原理
在認證用戶或者以其他方式建立新用戶會話時,如果不使任何現有會話標識失效,攻擊者就有機會竊取已認證的會話,此漏洞可結合XSS獲取用戶會話對系統發起登錄過程攻擊。
1.2、APPSCAN測試過程
AppScan會掃描“登錄行為”前后的Cookie,其中會對其中的會話信息進行記錄,在登錄行為發生后,如果cookie中這個值沒有發生變化,則判定為“會話標識未更新”漏洞
1.3、修復建議
1. 始終生成新的會話,供用戶成功認證時登錄,防止用戶操縱會話標識,請勿接受用戶瀏覽器登錄時所提供的會話標識;在對新用戶會話授權之前廢除任何現有會話標識。
2. 對於不為會話標識 cookie 生成新值的平台(例如 ASP),請利用輔助 cookie。在該方法中,將用戶瀏覽器上的輔助 cookie 設置為隨機值,並將會話變量設置為相同值。如果會話變量和 cookie 值從不匹配,請廢除會話,並強制用戶再次登錄。
3. 若使用的是Apache Shiro安全框架,可使用SecurityUtils.getSubject().logout()方法,參考:http://blog.csdn.net/yycdaizi/article/details/45013397
1.4、修復代碼樣例
在登陸頁面中添加如下代碼:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//獲取cookie
cookie.setMaxAge(0);//讓cookie過期
%>
在驗證登陸成功前添加如下代碼:
try {
request.getSession().invalidate();
if (request.getCookies() != null) {
Cookie cookie = request.getCookies()[0];// 獲取cookie
cookie.setMaxAge(0);// 讓cookie過期
}
} catch (Exception e) {
e.printStackTrace();
}
session = request.getSession(true);
1.5、例外處理
登錄前后會話確實已更新,則可視為誤報
1.6 、實際修復方案
在登錄成功之后,加入圖上紅框中的代碼。