任何人都有任何针对Rails和会话的“最佳做法”提示? Rails 3的默认会话类型仍然是CookieStore,对吧?我使用SqlSessionStore已经有一段时间了,它运行良好,但我可能会偏离它,转而支持CookieStore。
将CookieStore用于敏感信息仍然不是一个好主意,即使是使用盐腌信息还是更好地存储在数据库中?
答案 0 :(得分:102)
将数据库用于会话而不是基于cookie的默认值,不应将其用于存储高度机密的信息
使用
创建会话表rake db:sessions:create
运行迁移
rake db:migrate
确保您也告诉rails使用ActiveRecord来管理您的会话。
配置/初始化/ session_store.rb:
Rails.application.config.session_store :active_record_store
配置/ environment.rb中:
config.action_controller.session_store = :active_record_store
答案 1 :(得分:49)
在Rails 4中,CookieStore Cookie默认为加密和签名:
如果您只设置了
secret_token
,那么您的Cookie将被签名,但不会 加密。这意味着用户无法在不知道您的情况下更改user_id
应用程序的密钥,但可以轻松阅读他们的user_id
。这是默认值 对于Rails 3应用程序。如果您设置了
secret_key_base
,您的Cookie将被加密。这是一个 比签名的cookie更进一步,因为加密的cookie不能被更改 或由用户阅读。这是Rails 4中的默认开始。如果同时设置了
secret_token
和secret_key_base
,那么您的Cookie就会出现 加密,Rails 3生成的签名cookie将是透明的 读取并加密以提供平滑的升级路径。
This answer现已过时。活动记录 会话存储已被弃用并从Rails中删除,因此如下 发电机将不再起作用:
rake db:sessions:create
rails generate session_migration
this answer指出了这一点。积极记录的原因 不推荐使用会话存储是因为对数据库的读/写不是 当您有大量用户访问您的应用程序时,可以很好地扩展 在this blog post中说明:
... Active Record会话存储的一个主要问题是它不是 可扩展性。它会给您的数据库带来不必要的负担。一旦你的申请 接收大量流量,会话数据库表是 不断受到读/写操作的轰炸。
从Rails 4开始,Active Record会话存储已从核心中删除 框架,现已弃用。
如果您仍想使用Active Record会话存储,it's still available as a gem。
对于Ruby on Rails会话的更多当前最佳实践,我建议你 查看最新版本的Ruby on Rails Security Guide。
答案 2 :(得分:9)
我不相信任何平台上的任何人应该如何处理基于cookie的会话。对超出服务器控制范围的任何事情持怀疑态度(cookie,表格帖子等)这是网络开发的一般原则。
就加密而言,我不知道在这方面是否有任何改变。
使用cookie存储需要注意的是数据量的限制,以及在每个请求中将这些数据发送到线上的问题,因为数据库存储只传输id和数据生命在服务器上。
答案 3 :(得分:4)
FWIW,rails 3.1建议运行
rails generate session_migration
然而,这会产生与
完全相同的迁移rake db:sessions:create
答案 4 :(得分:2)
Rails默认值对我来说似乎相当不错--CookieStore很快,应该涵盖大多数用例。当然,你的数据限制在4kb,用户可以看到你的数据,但是Rails方式只是使用会话来处理整数ID和基本字符串值等事情 - 如果你试图在会话中存储对象或高度机密的信息你可能做错了。