我注意到很多Rails身份驗證教程將會話ID [:user_id]中的用戶ID存儲起來以記住用戶並對其進行身份驗證。假設應用程序中有某處user_ids被公開暴露(URL,HTML屬性的屬性等),是不是不安全,因爲我可以編輯我的會話cookie以使用其他人的user_id?我在這裏錯過了什麼嗎?使用會話[:user_id]進行Rails身份驗證的安全性
4
A
回答
8
根據Rails Security Guide: 「爲了防止會話哈希被篡改,摘要是從具有服務器端祕密的會話中計算出來的,並將其插入cookie的末尾。」
所以它看起來像會話可以被認爲是安全的從用戶篡改它(假設我們的服務器端的祕密保持安全)。但是,用戶仍然可以讀取會話散列中的任何內容,因此我們不希望存儲敏感信息。
5
該cookie往往不包含user_id,它包含會話密鑰,它本質上是一個隨機的,無意義的字符串。會話存儲在服務器上(在數據庫中,或memcached,或像redis等nosql存儲),會話保存用戶ID。
因此,會議記錄(僅服務器端)給定用戶可能包含這樣的數據:
key: asoiuoi09u23uo8789289askho2
user_id: 1234
以及Cookie(客戶端)持有的會話密鑰,所以餅乾看起來是這樣的:
name: somecookiename
site: www.yoursite.com
content: asoiuoi09u23uo8789289askho2
因此,要訪問其他人的會話,您需要掌握他們的會話密鑰。這絕非不可能(請參閱會話嗅探),但使用https(反過來需要SSL證書)會變得更加困難。
+1
如果你改變會話存儲使用數據庫,這將是真實的,但默認情況下,因爲Rails 2,我相信它是CookieStore。我假設默認的Rails配置。 – 2012-04-27 17:57:17
0
一般來說,我感覺,Cookie會話中的:session_id
是無用的,可以省略,因爲它在大多數情況下不會在服務器端進行檢查。或者我錯了?
在大多數情況下:user_id
和簽名就足夠了。
相關問題
- 1. 長身份驗證會話和安全
- 2. 使用has_secure_password進行Rails身份驗證
- 3. 使用共享屬性進行身份驗證驗證安全嗎?
- 4. 使用會話認證通過捲曲進行身份驗證
- 5. 使用LDAP針對使用彈簧安全性的ADAM進行身份驗證
- 6. 在asp.net中使用會話進行用戶身份驗證c#
- 7. WCF - 使用證書對消息安全性客戶端進行身份驗證
- 8. 使用grails和spring安全進行跨域身份驗證
- 9. 使用AES進行安全身份驗證
- 10. ASMX安全性無身份驗證
- 11. LogiXML安全性 - 基本身份驗證
- 12. Tomcat身份驗證和Spring安全性
- 13. Laravel - 使用會話令牌進行身份驗證
- 14. 使用會話在PHP中進行身份驗證
- 15. 使用Passport進行身份驗證後創建新會話
- 16. 如何使用Perl進行身份驗證和會話管理?
- 17. 玩!框架:使用會話進行身份驗證
- 18. 使用coldfusion會話ID進行SSO身份驗證
- 19. 使用Apache CXF進行身份驗證和會話管理DOSGi
- 20. WCF安全使用Windows身份驗證
- 21. 安全API身份驗證
- 22. 安全LDAP身份驗證
- 23. 身份驗證:JWT使用與會話
- 24. 使用會話存儲身份驗證?
- 25. CherryPy會話身份驗證?
- 26. ASP.NET身份驗證會話
- 27. 需要使Javamail更加安全地進行Gmail身份驗證
- 28. 使用彈簧安全性對數據庫失敗進行身份驗證。
- 29. ASP.NET身份驗證和安全與會話
- 30. 是使用WsHttpBinding中的UserNamePasswordValidator進行身份驗證使用消息安全性是安全的?
你能鏈接到最近的一個例子嗎?像Devise這樣的解決方案非常標準,聽起來像是從舊版Rails中解脫出來的。 – 2012-04-27 15:59:07
通常會生成某種類型的會話標識,並將其傳遞給Cookie,而不是用戶標識。 – 2012-04-27 16:03:03
下面是一個例子:https://github.com/RailsApps/rails3-mongoid-omniauth – 2012-04-27 17:37:03