2005-07-16 (Sat) [長年日記]
_ Login GeneratorのSession Fixation Attack対策(2)
これを回避するには以下のようにセッションをリセットしてやればよい。
[Journal InTime - CSRF対策 , Login GeneratorのSession Fixation Attack対策 , クッキーのパス , セッションファイルの作成場所より引用]
某所でセッションデータは引き継ぎたいという話があったのでちょっと改良。
def login case @request.method when :post user = User.authenticate(@params[:user_login], @params[:user_password]) if user @session[:user] = user data = @session.instance_variable_get(:@data) @request.reset_session @session = @request.session for key, val in data @session[key] = val end flash['notice'] = "Login successful" redirect_back_or_default :controller => "page", :action => "list" else flash.now['notice'] = "Login unsuccessful" @login = @params[:user_login] end end end
もうちょっとマシな方法はないものか。
_ Login GeneratorのSession Fixation Attack対策(3)
しつこいようですが。
RailsではクッキーでしかセッションIDは渡されないので、session fixation は難しいのではないかという話がある。
しかし、たとえば、ホスティングサービスなどで、同一ドメイン上に信頼 できない他のウェブアプリケーションが存在する場合などは危険だ。 また、他のXSS脆弱性との合わせ技といったことも考えられるので、 対策はしておいた方がよいと思う。