關於AppScan安全檢測會話標識未更新

會話標識未更新
嚴重性: 中
CVSS 分數: 6.4
URL: http://119.60.12.114:18079/NXZDWRYZXJC/action/user/login
實體: login (Page)
風險: 可能會竊取或操縱客戶會話和 cookie,它們可能用於模仿合法用戶,從而使黑客能夠以該用戶身份查
看或變更用戶記錄以及執行事務
原因: Web 應用程序編程或配置不安全
固定值: 登錄之後更改會話標識符值
差異:
推理: 測試結果似乎指示存在脆弱性,因爲“原始請求”和“響應”中的會話標識相同。這些標誌應該已在響應中更新。

解決方法
方案一:
如果不需要保留上一次的session,直接在每次訪問登陸時清除上一次的session:

    在登錄頁面上加上一段代碼:
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()[0];//獲取cookie
cookie.setMaxAge(0);//讓cookie過期
然後用戶再輸入信息登錄時,就會產生一個新的session了。

方案二:更新上一次的session信息,保證再Tab頁打開已登錄的系統session能更新共享使用。

if (request instanceof HttpServletRequest) {
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            if (httpRequest.getSession() != null) {
                HttpSession session = httpRequest.getSession();
                HashMap<String, Object> old = new HashMap<String, Object>();
                Enumeration<String> keys = session.getAttributeNames();
                while (keys.hasMoreElements()) {
                    String key = (String) keys.nextElement();
                    old.put(key, session.getAttribute(key));
                    session.removeAttribute(key);
                }

                if (!httpRequest.getSession().isNew()){
                    session.invalidate();
                    session = httpRequest.getSession(true);
                }

                for (Iterator<Entry<String, Object>> it = old.entrySet().iterator(); it.hasNext();) {
                    Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();
                    session.setAttribute((String) entry.getKey(), entry.getValue());
                }
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章