【问题标题】:Rails: Devise not properly destroying user session cookie after calling destroy_user_session_pathRails:在调用destroy_user_session_path后设计不正确地销毁用户会话cookie
【发布时间】:2013-06-07 14:31:13
【问题描述】:

您好,我正在使用 Devise LDAP Authenticatable gem,但在尝试正确使会话 cookie 无效时遇到了一些问题。

例如:

  • 用户登录应用程序并保存他的会话 cookie
  • 用户注销并获得一个新的会话 cookie
  • 用户可以通过强制浏览器使用他保存的旧会话 cookie 来重新登录服务器

这是一个我需要解决的安全问题,因为这允许黑客仅嗅探 cookie 并将自己验证为登录到应用程序的授权用户。

似乎当我调用 destroy_user_session_path 时,Devise LDAP 实际上并没有使旧会话无效,而是它只是创建一个新会话并将其提供给用户浏览器。

我可以使用任何设计设置来更改此设置。我真的不想自己更改实际的设计宝石。

设计.rb

Devise.setup do |config|

  config.ldap_create_user = true
  config.ldap_update_password = false

  config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com"

  require 'devise/orm/active_record'

  config.authentication_keys = [ :email ]

  config.case_insensitive_keys = [ :email ]

  config.strip_whitespace_keys = [ :email ]

  config.skip_session_storage = [:http_auth]

  config.stretches = Rails.env.test? ? 1 : 10

  config.reconfirmable = true

  config.reset_password_within = 6.hours

  config.sign_out_via = :delete

end

【问题讨论】:

    标签: ruby-on-rails cookies devise


    【解决方案1】:

    这是基于 cookie 的会话存储的标准行为 - 特别是默认的 Rails/Rack CookieStore。会话完全保存在 cookie 中,服务器上没有会话状态(据我所知)。这意味着,如果有人窃取了他们可以访问该用户帐户的 cookie,并且使 cookie 无效的唯一方法是更改​​用于对 cookie 进行数字签名的秘密。最好的防御措施是为您的整个站点使用 SSL。您还可以向 ApplicationController 添加一些之前/之后的过滤器,并应用一些其他缓解策略,例如时间戳和保留有效/活动会话的列表。此链接很好地描述了一些选项:

    https://www.coffeepowered.net/2013/09/26/rails-session-cookies/

    【讨论】:

      【解决方案2】:

      这里问题:https://github.com/plataformatec/devise/issues/3031

      您必须将会话存储更改为 Active Record 会话存储 - https://github.com/rails/activerecord-session_store

      【讨论】:

        猜你喜欢
        • 2011-01-15
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 2015-03-03
        • 2011-06-08
        • 1970-01-01
        • 2012-03-21
        • 1970-01-01
        相关资源
        最近更新 更多