差分

2009-09-25 79 views
9

我想知道是否有會話加密的cookie之間的任何差異(配置爲過期的會話cookie一樣)。差分

它們不是完全相同的東西嗎?或者Rails爲會話提供額外的安全性?

回答

19

會話是比cookie更高級的事情。會話是僅保留一個用戶會話的變量集合。會話可以存儲在cookie中,數據庫中或會話處理插件選擇存儲的地方。 Cookies現在是會話存儲在現代版本的Rails中的默認位置。注意:當會話存儲在cookie之外時,cookie中存儲了一個ID,因此Rails可以在存儲它的任何地方(例如數據庫)中查找會話數據。

現在,讓我繼續討論我想要問的問題:Rails的默認會話存儲(使用未加密的cookie)和Phusion's EncryptedCookieStore或任何其他加密cookie會話存儲實現之間的區別?你爲什麼關心加密會話cookie?

http://agilewebdevelopment.com/plugins/encrypted_cookie_store,這裏區別的關鍵所在:「EncryptedCookieStore類似於Ruby on Rails的的的CookieStore(它在cookie保存會話數據),但它使用的加密,使人們不能看的會話數據,因此可以將敏感數據存儲在會話中「。

請注意,有多個不同的EncryptedCookieStore's。 AFAIK,你想要使用Phusion's EncryptedCookieStore而不是ThinkRelevance的舊版EncryptedCookieStore。

如果您沒有對cookie進行加密,那麼訪問cookie的任何人都可以輕鬆讀取會話數據(可以通過網絡嗅探器,磁盤訪問客戶端,XSS等)。有關如何存儲會話變量的詳細信息到Cookies(以及安全隱患),請看這裏:http://www.neeraj.name/2009/05/04/how-cookie-stores-session-data-in-rails.html

請注意,默認(非加密)cookie存儲是防篡改的(意味着Rails會拒絕惡意更改的cookie)。所以如果你擔心的是阻止人們更改你的cookies(但不關心他們是否看到你的cookies),那麼你可以使用默認設置。

+1

它如何防篡改? – dangerousdave 2010-08-07 12:39:06

+3

Rails使用HMAC(http://en.wikipedia.org/wiki/HMAC)來保證沒有人從Rails存儲它的方式修改cookie。 – 2010-08-07 15:28:22