3

嗨,我正在使用 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
4

2 回答 2

1

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

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

于 2013-10-04T18:45:06.770 回答
0

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

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

于 2018-03-28T14:59:23.243 回答