簡體   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