我知道如果將會話保存到cookie中,您需要使用祕密加密它們,否則惡意客戶端可能會隨意修改其會話。由於許多普遍討論的原因,這種設計仍然很糟糕。但是,如果在服務器上保存會話(我碰巧通過Rack:Session:Dalli使用Memcache存儲),我知道所有客戶端獲取的都是一個cookie,其中包含一個服務器用於查找其會話的cookie商店。我仍然設置會話祕密。但我不明白它做了什麼。通過服務器上的會話存儲,會話祕密會做什麼?
0
A
回答
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。
相關問題
- 1. 爲什麼會話需要存儲在站點服務器上?
- 2. 什麼叫會話存儲?
- 3. 通過服務器的Rails會話
- 4. 存儲Kerberos會話密鑰
- 5. 存儲會話
- 6. 存儲會話
- 7. 雲服務器上memcached上的會話存儲
- 8. 新會話存儲舊會話信息
- 9. 快速會話沒有存儲會話
- 10. 快速會話沒有存儲會話
- 11. Django會話存儲所有會話
- 12. express:會話存儲,查詢會話密鑰redis
- 13. current_user未存儲在生產服務器上的會話
- 14. 單獨服務器上的會話存儲
- 15. 通過Memcache的Django會話:手動找不到會話密鑰
- 16. 服務器之間的會話通信
- 17. 什麼加密算法最適合加密服務器上的會話文件?
- 18. 在服務器會話中存儲通用Google Analytics(分析)
- 19. TOTP:更改每個會話的祕密
- 20. 會話過期屬性不會被觸發在服務器上
- 21. ASMX Web服務通過會話
- 22. 通過facebook會話服務(SDK 3.0.1)
- 23. 會話過期後會話ID會發生什麼變化?
- 24. 在會話中存儲什麼?
- 25. 爲什麼要在服務器上存儲會話而不是在cookie中?
- 26. IOS會話存儲
- 27. rails3會話存儲
- 28. 存儲和會話
- 29. 存儲在會話
- 30. html5會話存儲
好酷我明白。我的會議ID從1增加,所以我需要加密它們,所以他們不能被猜到 –
啊,我認爲你使用的是隨機會話ID。是的,絕對加密可預測的會話cookie。最好用一個長的機器生成的鑰匙。 – Catnapper