4

RoRセキュリティガイドには、セッション固定に対抗するためにreset_sessionメソッドを使用して、「新しいセッションIDを発行し、ログインが成功した後に古いIDを無効と宣言する」必要があると記載されています。

Authlogicを使用しているときにreset_sessionを呼び出すためのガイダンスを見つけることができませんでした。それは単にコントローラーメソッドにメソッドを含める場合ですか(以下のように)?

reset_sessionを呼び出す前に、セッションハッシュにuser_credentialsとuser_credentials_idの両方のキーと値が表示されるため、Authlogicで問題が発生することを懸念しています。

class UserSessionsController < ApplicationController

  def create
    @user_session = current_client.user_sessions.new(params[:user_session])
    if @user_session.save
      reset_session
      flash[:success] = I18n.t(:msg_login_success)
      redirect_back_or_default application_root_path
    else
      render :action => :new
    end
  end
4

2 に答える 2

1

参考までに、これは私の現在の方法です。

def create
  @user_session = current_client.user_sessions.new(params[:user_session])

  if @user_session.save
    # reset session to counter session fixation
    # whilst retaining values except for those that the application has created specific to the current user
    temp_session = session.merge("current_user" => {}).clone
    reset_session
    session.reverse_merge!(temp_session)
    # set flash msg and redirect
    flash[:success] = I18n.t(:msg_login_success)
    redirect_back_or_default application_root_path
  else
    render :action => :new
  end
end

http://guides.rubyonrails.org/security.html#session-fixation-countermeasuresの推奨事項に従って、ログインが成功した後もreset_sessionの呼び出しが実行されます。

于 2013-01-14T14:41:00.353 に答える
0

ええ、ユーザーがログインした後にセッションをリセットすることは(これは起こっているように見えますか?)間違いなく正しくありません。ユーザーをログインする前に実行する必要があります。

理想的には、ユーザーにログインする前にログインする必要がありますが、ログインが実際に成功する場合に限ります。ただし、auth_logicにそれを実行させることができるかどうかはわかりませんが、auth_logicの経験はあまりありません。 、auth_logicにとっては本当に良い質問ですが、もし私があなたなら、auth_logicにサポートチケットとして提出します。

ただし、それまでの間は、アクションメソッドreset_session先頭の前に を配置してみてください@user_session = current_client.user_sessions.new(params[:user_session])。これはうまくいくと思いますし、最悪の場合、本当に必要のない場合(ユーザーの資格情報が無効な場合)にセッションをリセットしますが、それが深刻な問題を引き起こすことはないと思います。(ええと、それがあなたの検証エラーを失う原因にならない限り?)

ただし、ここでもauth_logicの専門家ではありません。私には実際に答える専門知識がないので、あなたがこの答えを受け入れることを期待していません。それがあなたを助け、それについて考える方法についてあなたにいくつかの指針を与える場合に備えて、私が思うことを共有するだけです。

于 2012-11-04T21:33:58.323 に答える