【问题标题】:Disabling :cookie_only in the session store in Rails 3?在 Rails 3 的会话存储中禁用 :cookie_only?
【发布时间】:2011-05-22 00:10:42
【问题描述】:

我们有一个 Rails 应用程序,它与基于 PhoneGap 的 iPhone 应用程序进行通信。我们正在将 Rails 应用程序从 Rails 2.3.5 升级到 3。由于一些问题让 PhoneGap 与 Rails 的 cookie 配合得很好,Rails 应用程序(升级前)配置为 :cookie_only 设置为 false:

ActionController::Base.session = {
    :key => '_our_key',
    :secret => 'ourreallyreallylongsecret',
    :cookie_only => false
}

此配置已针对 Rails 3 转换为以下内容:

OurApp::Application.config.session_store :cookie_store, :key => '_our_key'
OurApp::Application.config.secret_token = 'ourreallyreallylongsecret'

问题是,我不知道如何在 Rails 3 中使用 :cookie_only 选项。现在,我意识到将 :cookie_only 设置为 false 是一个非常糟糕的主意,并且会导致令人讨厌的会话固定漏洞。我们当然计划在未来解决这个问题。但是,现有的 iPhone 应用程序完全依赖这种行为才能运行。因此,在我们全面检查 iPhone 应用程序的会话内容时,我需要能够让 iPhone 应用程序在短期内正常工作。

查看CookieStore 的 Rails 源代码,他们似乎真的不希望我们再使用该选项了:

def initialize(app, options = {})
    super(app, options.merge!(:cookie_only => true))
    freeze
end 

我们猴子修补了 Rails 源代码以合并到 :cookie_only => false,但没有成功。我们甚至直接在AbstractStoreinitilize 方法中设置@cookie_only = false,但它被忽略了。似乎CookieStore 实现不再尊重@cookie_only

真的没有办法在 Rails 3 中使用这个功能吗?任何帮助将不胜感激。

【问题讨论】:

  • 在这里,我已经准备好加入对会话固定攻击的描述。祝你好运,对不起,我帮不上忙

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


【解决方案1】:

如果其他人和我一样,看起来如果不对 Rails 代码本身进行认真修改,就不可能在 Rails 3 中使用:cookie_only 选项。并且有充分的理由,因为从安全角度来看,使用它确实是一个坏主意。

如果您在 iPhone 上的 PhoneGap 中使用 cookie 时也遇到问题,请查看这个问题,它解决了我们的问题并消除了对 :cookie_only 选项的需要:phonegap: cookie based authentication (PHP) not working [webview]

【讨论】:

    【解决方案2】:

    这非常容易做到,并且不需要对 Rails 代码进行任何修补或修改,您只需要一个初始化器:

    Rails.application.config.session_store :active_record_store, cookie_only: false
    

    注意:我使用active_record_store 进行会话存储,但您可能使用默认的cookies_store 或其他任何内容,请根据您的需要进行调整。

    重启服务器,打开另一个浏览器,确保那个浏览器上没有cookie,就可以访问http://your.server/protected/path?session_key=valid_session_id

    请记住,根据您使用此机制的方式,有人可能会更简单地窃取其他用户的 session_id。但如果你明智地使用它,它与将 session_in 放在 cookie 中没有什么不同。

    代码库:Rack::Session::Abstract::ID#extract_session_id https://github.com/rack/rack/blob/master/lib/rack/session/abstract/id.rb#L272

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多