トップ «前の日記(2005-07-15 (Fri)) 最新 次の日記(2005-07-19 (Tue))» 編集   RSS 1.0 FEED  

Journal InTime


2005-07-16 (Sat) [長年日記]

_ [Rails] 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

もうちょっとマシな方法はないものか。

_ [Rails] Login GeneratorのSession Fixation Attack対策(3)

しつこいようですが。

RailsではクッキーでしかセッションIDは渡されないので、session fixation は難しいのではないかという話がある。

しかし、たとえば、ホスティングサービスなどで、同一ドメイン上に信頼 できない他のウェブアプリケーションが存在する場合などは危険だ。 また、他のXSS脆弱性との合わせ技といったことも考えられるので、 対策はしておいた方がよいと思う。