【安全問題】加密會話(SSL)Cookie 中缺少 Secure 屬性


最近項目上線,開啟https(ssl)后,Cookie出現缺少Secure 屬性的情況。因為Cookie少了Secure屬性,沒有告知瀏覽器采用https方式來傳輸信息,所以在可以被外界獲取到用戶標識特征,如 JSESSIONID session會話ID 。

session cookie
用戶首次訪問Web站點時,Web服務器對用戶一無所知,但希望用戶再次訪問的時候,能根據特征識別用戶。cookie中包含了一個由 name=value 這樣信息構成的任意列表,並通過Set-Cookie或Set-cookie2 HTTP響應(擴展) Headers 首部 將其貼到用戶身上去。
場景
用戶登錄界面,使用openssl生成證書,采用https方式傳輸,不被外界(攻擊者)所截取用戶密碼等明文信息。

問題
由於session cookie沒設置了secure屬性,通知瀏覽器使用https方式連接,cookie中的JSSESSIONID 等其它信息對於攻擊者是可見了,沒避免中間人攻擊(Man-in-the-Middle Attack,簡稱“MITM攻擊”)。

解決
Servlet 3.0環境
直接在web.xml配置以下信息開啟 cookie secure屬性

<session-config>
  <cookie-config>
    <secure>true</secure>
  </cookie-config>
</session-config>

Servlet 3.0以下環境
設置response 請求頭cookile信息,添加Secure屬性。對於HttpOnly也是同樣,在后面直接添加。
處理可以寫個過濾器filter,對於需要的請求,添加cookile信息,走https傳輸方式;也可以在特定的MVC 控制器里設置,走https傳輸方式。

String jSessionId=request.getSession().getId();
response.setHeader("Set-Cookie", "JSESSIONID="+jSessionId+"; Secure;HttpOnly;");


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM