【问题标题】:Rails: Is that safe to store data in "session"?Rails:在“会话”中存储数据安全吗?
【发布时间】:2011-07-25 04:13:16
【问题描述】:

我想将当前登录用户的类型存储在session[:user_type] 中。选项有:“admin”、“end_user”、“demo”(将来可能会添加更多用户类型)。

我想知道在 Rails 3 应用程序中这样做是否安全。

用户能否以某种方式将session[:user_type] 从“demo”更改为“admin”?

【问题讨论】:

    标签: ruby-on-rails security ruby-on-rails-3 session


    【解决方案1】:

    这取决于您的会话存储。
    默认情况下使用 cookie 作为会话存储,因此默认情况下它是不安全的,很容易更改 cookie 的内容。

    所以你可以:

    • 更改您的会话存储 config/initializers/session_store.rb 并使用 activerecord 存储(因此它将存储在 db 中)或 memcache 存储。 github 上还有很多插件可以让你使用 redis、mongodb 等作为会话存储
    • 将此信息存储在您的数据库中,并在您的 application_controller 中使用 before_filter 访问 cookie 以获取当前用户 ID 并在变量 @current_user 中获取整个用户对象

    【讨论】:

    • 一个问题:如果用户id存储在cookie中,用户不能尝试更改它吗? (经过几次尝试,他可能会猜到管理员用户 ID)
    • @Misha。你是对的,user_id 不应该在 cookie 中,因为它可以被操纵。但是,如果您将 user_id 存储在 session 中并且不使用 cookie_store 作为 Mike 的第一个替代方案,那么您就不会遇到这个问题。
    • 这并不完全准确(阅读下面由 ThoKra 链接的文章)。 Rails 使用摘要对 cookie 进行签名,如果摘要不匹配,则会话值返回 nil,因此最终用户无法更改会话值,即使它们存储在 cookie 中。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 2011-08-09
      • 2014-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2023-03-24
      • 2014-10-27
      相关资源
      最近更新 更多