繁体   English   中英

Rails:在调用destroy_user_session_path之后,Devise无法正确销毁用户会话cookie

[英]Rails: Devise not properly destroying user session cookie after calling destroy_user_session_path

嗨,我正在使用Devise LDAP Authenticatable gem,并且在尝试正确使会话cookie失效时遇到了一些问题。

例如:

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

这是我需要解决的安全问题,因为这使黑客可以嗅探cookie并以授权用户身份登录该应用程序来对自己进行身份验证。

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

有什么设计设置可用于更改此设置。 我真的不想自己更改实际的设计宝石。

devise.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

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

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

在这里发出: https : //github.com/plataformatec/devise/issues/3031

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM