【发布时间】: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,但没有成功。我们甚至直接在AbstractStore 的initilize 方法中设置@cookie_only = false,但它被忽略了。似乎CookieStore 实现不再尊重@cookie_only。
真的没有办法在 Rails 3 中使用这个功能吗?任何帮助将不胜感激。
【问题讨论】:
-
在这里,我已经准备好加入对会话固定攻击的描述。祝你好运,对不起,我帮不上忙
标签: ruby-on-rails session cookies ruby-on-rails-3