2015-03-02 32 views
1

我正在使用節點庫https://github.com/expressjs/session,並注意到它需要指定一個祕密來簽署會話ID cookie。會話ID cookie是否應該簽名?

如果只是會話ID被存儲在cookie中,而不是任何數據,那麼在簽名cookie時有什麼用?

我的推理是,如果有人想修改會話ID cookie,那麼如果會話ID足夠長以防止暴力攻擊就沒問題。我錯過了什麼嗎?

+0

這可能會有幫助:http://stackoverflow.com/a/3240420/406249 – 2015-03-02 06:25:40

+1

@NicolasMcCurdy謝謝!有趣的是閱讀,但這個問題似乎是關於包含數據的會話cookie,因此不需要服務器端存儲。這對於需要簽名的cookie是有意義的,但在我的情況下,cookie只是存儲在服務器上的數據的標識符,所以它不容易出現相同的問題。 – countunique 2015-03-02 06:40:40

+0

也許是爲了防止他人在用戶的瀏覽器中創建假的會話cookie(通過XSS或類似的東西)。 – 2015-03-02 06:46:20

回答

0

如果您只存儲了會話的ID,那麼沒有理由對其進行加密。你是對的。 如果您在Cookie中存儲了一些會話數據,則不僅需要加密,而且還需要使用id。 這會阻止用戶更改會話數據。

0

session_id cookie是標識客戶端到服務器的任何東西(數字或字母數字),服務器又通過session_id/key存儲服務器上的數據(通常是臨時數據)。

問題是,如果cookie將通過HTTP傳回,則無論您是否「簽名」它都沒有關係。任何中間人都可以獲得「簽名/加密的session_id」,並提出假裝成爲合適用戶的進一步請求。我的意思是,這個攻擊者不必關心加密數據中的哪些信息,他可以傳遞完全相同的簽名/加密數據,而服務器無法弄清楚它是否來自正確的用戶。

像這樣的情況下,你必須弄清楚隱私是否重要,如果是這樣,不要想太多,你必須使用HTTPS。如果您瞭解它並不那麼重要,不要浪費您的「處理時間」簽名/加密和解密您的會話ID。

此答案僅適用於已簽名的session_id。

1

我問這個問題,以及我能想到是唯一的答案,

  • a)如果有人(在沒有更好的理由嗎?)更改默認的會話ID 代非加密的隨機會話ID,簽名 有助於防止攻擊者生成有效的會話ID。
  • b)通過使用簽名/ HMAC驗證會話 ID來減少會話存儲的往返行程。 (我只能想象這是針對DoS攻擊的問題 )。

兩個看起來雖然使用好會議的緩存會否定b的需要),並假設你的圖書館用戶的正當理由是足夠愚蠢更改默認的會話ID生成,似乎有點太多對安全守衛他們的當大多數用戶只使用默認的生成算法時,他們會有自己的愚蠢。