Ruby on rails 禁用:仅在Rails 3中的会话存储中禁用cookie_?

Ruby on rails 禁用:仅在Rails 3中的会话存储中禁用cookie_?,ruby-on-rails,session,cookies,ruby-on-rails-3,Ruby On Rails,Session,Cookies,Ruby On Rails 3,我们有一个Rails应用程序,可以与基于PhoneGap的iPhone应用程序进行通信。我们正在将Rails应用程序从Rails 2.3.5升级到Rails 3。由于PhoneGap在使用Rails的cookie时遇到一些问题,Rails应用程序预升级配置为:cookie_only设置为false: ActionController::Base.session = { :key => '_our_key', :secret => 'ourreallyreallylon

我们有一个Rails应用程序,可以与基于PhoneGap的iPhone应用程序进行通信。我们正在将Rails应用程序从Rails 2.3.5升级到Rails 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'
问题是,我不知道如何在Rails3中使用:cookie\u only选项。现在,我意识到将:cookie_only设置为false是一个非常糟糕的主意,会导致严重的会话固定漏洞。我们当然计划在将来解决这个问题。然而,现有的iPhone应用程序依赖于这种行为才能正常运行。因此,我需要能够让iPhone应用程序在短期内运行,同时对iPhone应用程序的会话内容进行全面检查

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

def initialize(app, options = {})
    super(app, options.merge!(:cookie_only => true))
    freeze
end 
我们对Rails源代码进行了monkey修补,以合并到:cookie_only=>false中,这不起作用。我们甚至直接在AbstractStore的initilize方法中设置@cookie_only=false,但它被忽略了。CookieStore的实现似乎不再只支持@cookie_


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

如果其他人与我是同一条船,那么如果不认真修改Rails代码本身,就不可能在Rails 3中使用:cookie_only选项。而且有很好的理由,因为从安全角度来看,使用它确实是一个坏主意


如果您在iPhone上的PhoneGap中使用cookie时也遇到问题,请看这个问题,它解决了我们的问题,并且不再需要:cookie_only选项:

这非常简单,不需要对Rails代码进行任何修补或修改,您只需要一个具有以下内容的初始值设定项:

Rails.application.config.session_store :active_record_store, cookie_only: false
注意:我正在使用活动的\u record_存储来存储会话,但是您可能正在使用默认cookies存储或其他任何东西,以适应您的需要

重新启动服务器,打开另一个浏览器,确保另一个浏览器上没有cookie,然后您可以访问

请记住,根据您使用此机制的方式,它可能会使某人从另一个用户处窃取会话id变得更简单。但是,如果你明智地使用它,这与将会话放在饼干中没有什么不同


代码库:Rack::Session::Abstract::IDextract_Session_id

在这里,我已经准备好加入会话固定攻击的描述。祝你好运伙计,抱歉我帮不了你