Asp.net

在 cookie 中加密會話 ID(或其他身份驗證值)是否有用?

  • April 9, 2022

在 Web 開發中,當啟用會話狀態時,會話 id 會儲存在 cookie 中(在 cookieless 模式下,將使用查詢字元串代替)。在 asp.net 中,會話 ID 是自動加密的。網際網路上有很多關於如何加密 cookie 的主題,包括會話 ID。我可以理解您為什麼要加密諸如 DOB 之類的私人資訊,但任何私人資訊都不應首先儲存在 cookie 中。那麼對於其他cookie值比如session id,加密的目的是什麼?它是否增加了安全性?無論您如何保護它,它都會被發送回伺服器進行解密。

再具體一點,

出於認證目的,

  1. 關閉會話,我不想再處理會話超時
  2. 在 cookie 中儲存某種 id 值,
  3. 在伺服器端,檢查 id 值是否存在並匹配,如果是,則驗證使用者。
  4. 當瀏覽器會話結束時,讓 cookie 值過期,這樣。

對比

Asp.net 表單身份驗證機制(我認為它依賴於會話或會話 ID)

後一種是否提供更好的安全性?

會話劫持等會話的攻擊旨在獲取有效的會話 ID。如果您現在要加密會話 ID,攻擊者只會瞄準加密的會話 ID,而您將沒有任何優勢。所以加密會話 ID 是沒有用的。請記住,會話 ID 只是用於標識會話的隨機值。攻擊者不需要知道該隨機值是否具有某種特定含義;他們只需要知道那個隨機值。

如果您想保護您的會話,請使用 HTTPS 通過 SSL 加密整個 HTTP 通信,並僅使用標誌設置 cookie

  • 允許通過 HTTPS 發送 cookie 和
  • HttpOnly禁止通過 JavaScript 進行本地訪問。

引用自:https://stackoverflow.com/questions/2840559