解決springboot項目shiro框架下的AppScan漏洞會話標識未更新問題

最近做的一個springboot項目 + shiro框架,在做安全漏洞檢查時爆出了一個安全漏洞:會話標識未更新。用的掃描工具是IBM的AppScan。

要解決會話標識未更新的安全問題,就需要在做登錄驗證時生成新的session,所以需要先將原來的session失效。 

一般的解決方法如下:

    public void login(HttpServletRequest request, ...){
         // 讓舊session失效
         request.getSession(true).invalidate();
         //登錄驗證
    }

還有一種方案:

在登錄頁面上加上一段代碼:
request.getSession().invalidate();//清空session
Cookie cookie = request.getCookies()0;//獲取cookie
cookie.setMaxAge(0);//讓cookie過期

然後用戶再輸入信息登錄時,就會產生一個新的session了。

----------------------------------------------------------------------------------

但是,如果使用了shiro框架,這樣做會報錯:...httpSession has been already invalidated。原因是shiro對HttpSession進行了一層包裝,你直接讓原生的session失效,沒有通知shiro,shiro再去使用session時就會報錯了。
最終的解決方法,不要使用原生的失效方法,而是使用shiro自己提供的api方法:SecurityUtils.getSubject().logout();

最終方案如下:

public Map<String, Object> login(HttpServletRequest request, String username, String password) {
    
        // 讓舊session失效,這一句代碼一定要放在登錄驗證的最前面
        SecurityUtils.getSubject().logout();
        // 登錄驗證
        ......
        
    }

本次針對 Appscan漏洞 會話標識未更新 進行總結,如下:

1.1、攻擊原理

  在認證用戶或者以其他方式建立新用戶會話時,如果不使任何現有會話標識失效,攻擊者就有機會竊取已認證的會話,此漏洞可結合XSS獲取用戶會話對系統發起登錄過程攻擊。

1.2、APPSCAN測試過程

  AppScan會掃描“登錄行爲”前後的Cookie,其中會對其中的會話信息進行記錄,在登錄行爲發生後,如果cookie中這個值沒有發生變化,則判定爲“會話標識未更新”漏洞

1.3、修復建議(目前只是Apache Shiro安全框架下的修復建議)

  若使用的是Apache Shiro安全框架,可使用SecurityUtils.getSubject().logout()方法,參考:http://blog.csdn.net/yycdaizi/article/details/45013397

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章