2012-10-08 77 views
0

我知道如果將會話保存到cookie中,您需要使用祕密加密它們,否則惡意客戶端可能會隨意修改其會話。由於許多普遍討論的原因,這種設計仍然很糟糕。但是,如果在服務器上保存會話(我碰巧通過Rack:Session:Dalli使用Memcache存儲),我知道所有客戶端獲取的都是一個cookie,其中包含一個服務器用於查找其會話的cookie商店。我仍然設置會話祕密。但我不明白它做了什麼。通過服務器上的會話存儲,會話祕密會做什麼?

回答

1

加密一個大的隨機數導致本質上另一個大的隨機數。換句話說,如果沒有歸因於信息的意義(它只是一個隨機數),那麼對加密沒有安全益處。如果您正在存儲的ID中嵌入了一些信息,例如某個位集或僅使用了某個ID子集,則加密很有用。

會話ID的長度很重要。顯然,ID越長,暴力強度越強。同時用戶會話的預期數量也是一個因素,因爲會話數量減少了查找有效會話ID所需的強力嘗試次數。例如,兩個同時會話將ID的有效強度降低一位(128位密鑰變得與127位密鑰一樣有效,只有一個會話)。一個亞馬遜規模的網站(比如說)有1,000,000個同時進行的會話會有效地損失20比特的會話密鑰強度。

如果您需要抵禦暴力攻擊,請實施中間件來檢查該問題。將信息添加到會話ID中,就像應用程序唯一字符串一樣,可以更輕鬆地檢測暴力攻擊(並需要會話ID加密)。請注意,這不是而是增強了密鑰本身的安全性,並且基本上是浪費精力,除非應用程序在呈現不正確的會話標識時採取某些操作。

無論您做什麼,只要確保使用SSL並將cookie設置爲僅https。超時會話服務器端,不要依賴cookie過期和客戶端瀏覽器的良好意願。

TL; DR:如果僅使用cookie進行會話ID存儲,如果使用了良好的RNG,則不需要加密。使用SSL並設置Cookie secure attribute

+0

好酷我明白。我的會議ID從1增加,所以我需要加密它們,所以他們不能被猜到 –

+0

啊,我認爲你使用的是隨機會話ID。是的,絕對加密可預測的會話cookie。最好用一個長的機器生成的鑰匙。 – Catnapper