session和token的安全認證

如今貌似大多數網站用戶認證都是基於 session 的,即在服務端生成用戶相關的 session 數據,而發給客戶端 sesssion_id 存放到 cookie 中,這樣用客戶端請求時帶上 session_id 就能夠驗證服務器端是否存在 session 數據,以此完成用戶認證。這種認證方式,能夠更好的在服務端對會話進行控制,安全性比較高(session_id 隨機),可是服務端須要存儲 session 數據(如內存或數據庫),這樣無疑增長維護成本和減弱可擴展性(多臺服務器)。 CSRF 攻擊通常基於 cookie 。另外,若是是原生 app 使用這種服務接口,又由於沒有瀏覽器 cookie 功能,因此接入會相對麻煩。web

基於 token 的用戶認證是一種服務端無狀態的認證方式,服務端不用存放 token 數據。用戶驗證後,服務端生成一個 token(hash 或 encrypt)發給客戶端,客戶端能夠放到 cookie 或 localStorage 中,每次請求時在 Header 中帶上 token ,服務端收到 token 經過驗證後便可確認用戶身份。這種方式相對 cookie 的認證方式就簡單一些,服務端不用存儲認證數據,易維護擴展性強, token 存在 localStorage 可避免 CSRF , web 和 app 應用這用接口都比較簡單。不過這種方式在加密或解密的時候會有一些性能開銷(好像也不是很大),有些對稱加密存在安全隱患(aes cbc 字節翻轉攻擊)。數據庫

相關文章
相關標籤/搜索