【问题标题】:Rails 3 with Authlogic and calling reset_sessionRails 3 与 Authlogic 并调用 reset_session
【发布时间】:2012-08-29 02:14:43
【问题描述】:

RoR Security Guide 声明您应该使用 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 session authlogic session-fixation


    【解决方案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

    【讨论】:

    • "current_user" =&gt; {} 添加到 temp_session 有什么意义?
    • 这样做是为了清空会话中“current_user”键的内容
    【解决方案2】:

    是的,在您登录用户后重置会话(这看起来会发生什么?)绝对不正确。您想在用户登录之前执行此操作。

    理想情况下,您希望在登录用户之前执行此操作,但前提是登录实际上会成功 - 但我不确定您是否可以让 auth_logic 执行此操作,我不是很有 auth_logic 经验,虽然这对 auth_logic 来说是一个非常好的问题,但如果我是你,我会将它作为支持票提交给 auth_logic。

    但与此同时,您可能只想尝试将reset_session 放在操作方法的顶部之前 @user_session = current_client.user_sessions.new(params[:user_session])。我认为这会起作用,更糟糕的是在某些情况下你真的不需要重置会话(如果用户的凭据无效),但我不认为 em> 这将导致严重的问题。 (嗯,哦,除非它导致您丢失验证错误?)

    但同样,这里不是 auth_logic 专家。我不希望你接受这个答案,因为我没有真正回答它的专业知识,只是分享我的想法以防它帮助你并给你一些关于如何思考的指示关于它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多