2010-12-08 3 views
1

Wir haben eine Rails App, die mit einer PhoneGap-basierten iPhone App kommuniziert. Wir sind dabei, die Rails-App von Rails 2.3.5 auf 3 zu aktualisieren. Aufgrund einiger Probleme, die PhoneGap mit den Cookies von Rails spielen lassen, wurde die Rails-App (vor dem Upgrade) mit :cookie_only auf false konfiguriert:Deaktivierung: cookie_only im Sitzungsspeicher in Rails 3?

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

Diese Konfiguration der folgenden für Rails übersetzt wurde 3:

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

Das Problem ist, ich kann nicht herausfinden, wie die :cookie_only Option verwenden nun in Rails 3, merke ich, dass Einstellung :cookie_only zu falsch ist eine wirklich schlechte Idee und führt zu fiesen Session Fixation Exploits. Wir planen natürlich, dies in Zukunft zu beheben. Die vorhandene iPhone-App verlässt sich jedoch auf dieses Verhalten, um überhaupt funktionieren zu können. Also muss ich in der Lage sein, die iPhone-App für den kurzen Lauf zu bekommen, während wir die Session-Sachen der iPhone-App überholen.

an der Rails Quelle der Suche nach CookieStore, sieht es aus wie sie uns wirklich mehr in der Lage sein nicht wollen, um diese Option zu verwenden:

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

Wir Affe die Schienen Quelle in :cookie_only => false, fusionieren gepatcht die funktioniert nicht. Wir gingen sogar soweit, @cookie_only = false in AbstractStore 's initilize Methode direkt zu setzen, aber es wurde gerade ignoriert. Es scheint, als ob die CookieStore Implementierung @cookie_only nicht mehr honoriert.

Gibt es überhaupt keine Möglichkeit, diese Funktionalität in Rails 3 zu verwenden? Jede Hilfe wäre sehr geschätzt.

+0

und hier war ich alle bereit, mit einer Beschreibung der Session-Fixation-Attacken läuten. Viel Glück Kumpel, tut mir leid, ich kann nicht helfen –

Antwort

0

Wenn jemand anderes ist das gleiche Boot war ich, es sieht aus wie es unmöglich ist, die :cookie_only Option in Rails 3 ohne ernsthafte Änderung an der Rails-Code selbst zu verwenden. Und das aus gutem Grund, weil es aus Sicherheitsgründen wirklich eine schlechte Idee ist.

Wenn Sie auch Probleme mit mit Cookies in PhoneGap auf dem iPhone, werfen Sie einen Blick auf diese Frage mit, löste es unser Problem und beseitigt die Notwendigkeit für die :cookie_only Optionen: phonegap: cookie based authentication (PHP) not working [webview]

0

Es ist extrem einfach zu tun und erfordert keine Patching oder Änderung auf Rails-Code, Sie benötigen nur einen Initialisierer mit:

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

Hinweis: ich verwende active_record_store für Sitzungsspeicher, aber Sie können die Standard-cookies_store oder irgendetwas anderes verwenden, die Anpassung an Ihre brauchen.

Starten Sie den Server, einen anderen Browser öffnen, sollten Sie kein Cookie auf dem anderen Browser, und Sie http://your.server/protected/path?session_key=valid_session_id

Beachten Sie, dass, je nachdem, wie Sie diesen Mechanismus verwenden, zugreifen können, es könnte etwas macht einfacher für jemanden, um eine session_id von einem anderen Benutzer zu stehlen. Aber wenn Sie es weise verwenden, ist es nicht anders, als die Session_in in einem Cookie zu tragen.

Codebases: Rack :: Session :: Zusammenfassung :: ID # extract_session_id https://github.com/rack/rack/blob/master/lib/rack/session/abstract/id.rb#L272