带有Authlogic并调用reset_session的Rails 3



RoR安全指南指出,您应该使用reset_session方法来对抗会话固定,"在成功登录后发出新的会话标识符并声明旧的会话标识符无效"。

在使用Authlogic时,我找不到任何关于调用reset_session的指导。这只是将该方法包含在控制器方法中的一种情况吗(如下所示)?

我只是担心会给Authlogic带来问题,因为在调用reset_session之前,我可以在会话哈希中看到user_credentials和user_credentials_id键和值。

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

为了参考,这是我目前的方法:

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

根据中的建议,在成功登录后仍然执行对reset_session的调用http://guides.rubyonrails.org/security.html#session-固定对策

是的,在用户登录后重置会话(这看起来是什么情况?)肯定是不对的。你想在用户登录之前完成。

理想情况下,你会想在用户登录之前完成这项操作,但前提是登录确实会成功——但我不确定你是否能让auth_logic来完成这项工作,我对auth_logic没有太多经验,尽管这对auth_log来说是一个非常好的问题,如果我是你,我会将其作为auth_logc的支持票证提交。

但与此同时,您可能只想尝试将reset_session放在操作方法的顶部放在@user_session = current_client.user_sessions.new(params[:user_session])之前。我认为这会起作用,更糟糕的是,在某些情况下,如果你真的不必重置会话(如果用户的凭据无效),但我不认为

但再说一遍,这里不是一个授权专家。我不希望你接受这个答案,因为我没有真正回答这个问题的专业知识,只是分享我的想法,以防它对你有帮助,并给你一些如何思考的建议。

相关内容

  • 没有找到相关文章

最新更新