如何提高cookie的安全性

一、限制敏感信息寫入cookie
如果要通過Cookie來維持用戶的登錄狀態(tài),請務(wù)必不要存儲 “登錄ID、密碼” 等敏感信息,而是應(yīng)該在服務(wù)端存儲用戶的會話狀態(tài)Session,并用對應(yīng)的SessionID來替代上述的敏感信息

二、在向Set-Cookie中寫入內(nèi)容前,要進行過濾

  1. 過濾特殊字符:
    防止針對Cookie的CRLF攻擊【如果當(dāng)Cookie的某些內(nèi)容是可由用戶控制的,那么千萬要在寫入Set-Cookie時對內(nèi)容進行過濾,尤其是換行符、截斷符等】
  2. 對保存到cookie里面的敏感信息必須加密
    cookie中的數(shù)據(jù)通常會包含用戶的隱私數(shù)據(jù),首先要保證數(shù)據(jù)的保密性,其次要保證數(shù)據(jù)不能被偽造或者篡改,基于這兩點,我們通常需要對cookie內(nèi)容進行加密,加密方式一般使用對稱加密(單密鑰,如DES)或非對稱加密(一對密鑰,如RSA),密鑰需要保存在服務(wù)器端一個安全的地方,這樣,別人不知道密鑰時,無法對數(shù)據(jù)進行解密,也無法偽造或篡改數(shù)據(jù)。

二、做Cookie的訪問控制

  1. 在HTTP響應(yīng)的Set-Cookie中添加HttpOnly屬性,限制 Cookie 的訪問權(quán)限Set-Cookie: name=value; HttpOnly。
    在設(shè)置了 HttpOnly 屬性的情況下,瀏覽器將禁止通過 JavaScript 訪問和修改 Cookie,從而有效地防止一些常見的攻擊,例如跨站腳本攻擊(XSS)
  2. 在HTTP響應(yīng)的Set-Cookie中添加Domain屬性,設(shè)置Cookie的可用域:Set-Cookie: name=value; Domain=example.com
  3. 在HTTP響應(yīng)的Set-Cookie中添加Path屬性,設(shè)置Cookie的可用路徑:Set-Cookie: name=value; Path=/

三、限制Cookie的傳輸方式

  1. 在HTTP響應(yīng)的Set-Cookie字段中添加Secure屬性,以要求Cookie僅在HTTPS下才能傳輸Set-Cookie: name=value; Secure

  2. 當(dāng)setSecure(true)時,只有在https協(xié)議下訪問的時候,瀏覽器才會發(fā)送該cookie給服務(wù)端,http連接不發(fā)送,所以絕對不會被竊聽到

  • 當(dāng)setSecure(true)時,瀏覽器端的cookie不會傳遞到服務(wù)器端
  • 當(dāng)setSecure(true)時,服務(wù)器端的cookie會傳遞到瀏覽器端

四、限制Cookie的存儲

  1. 在HTTP響應(yīng)的Set-Cookie中添加expires和max-age屬性,設(shè)置過期時間:
  • 用expires指定絕對時間: Set-Cookie: name=value; expires=Wed, 21 Oct 2021 07:28:00 GMT;

  • 用max-age指定存活時間(s): Set-Cookie: name=value; max-age=3600;

  1. 給cookie設(shè)置有效期意義
  • 如果不設(shè)置有效期,萬一用戶獲取到用戶的Cookie后,就可以一直使用用戶身份登錄。
  • 在設(shè)置Cookie認證的時候,需要加入兩個時間,一個是“即使一直在活動,也要失效”的時間,一個是“長時間不活動的失效時間”,并在Web應(yīng)用中,首先判斷兩個時間是否已超時,再執(zhí)行其他操作。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容