淺談session及其安全

April發表於2018-04-16

什麼是Session?

  • Session在網路應用中被稱為“會話控制”。
  • Session儲存在伺服器端。
  • 使用者A訪問網站B,A登入網站後,伺服器會建立一個Session來儲存使用者狀態和相關資訊。每個Session對應一個識別符號SessionID來標識使用者身份。SessionID一般是由伺服器以加密的方式寫到cookie中的,這樣使用者A登入後,訪問網站B中不同的網頁時請求中會帶上SessionID來標識他的身份,以此實現一次登入,訪問全網站。(現在大多數站點採用基於cookie的session管理方式:使用者登陸成功後,設定一個唯一的cookie標識本次會話,基於這個標識進行使用者授權。只要請求中帶有這個標識,都認為是登入態。)

Session劫持

只要請求中帶有這個標識,都認為是登入態

這就危險了,一旦你的標識被別人獲取,你的Session就被別人劫持了,他就可以用你的身份為所欲為。

最基本的cookie竊取方式:xss漏洞

攻擊者最簡單獲取他人cookie資訊的方法是XSS攻擊,想辦法注入js指令碼到被攻擊者客戶端並執行,通過執行這個js指令碼,攻擊者在被攻擊者登入後獲得了他的SessionID,通過在自己客戶端修改sessionId獲得了被攻擊者的身份,後果不堪設想。。。

防禦方法

  • cookie設定為HttpOnly,js指令碼就無法再獲取cookie,也就無法得到你的會話標識。
  • 防止xss注入:過濾使用者輸入
  • 每次請求做其他驗證:cookie中取加密後的使用者id,session中取使用者id並加密,比較二者,不同時攔截住。(個人理解)

相關文章