4

RoR Security Guide에는 reset_session 메서드를 사용하여 세션 고정에 맞춰 "새 세션 식별자를 발급하고 성공한 로그인을 사용할 수 없다는 것을 선언해야합니다"라고 나와 있습니다.레일 3 (Authlogic 포함) 및 reset_session 호출

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 

답변

1

이 내 현재의 방법이다 :` "CURRENT_USER"를 추가하는 시점 무엇 여전히 http://guides.rubyonrails.org/security.html#session-fixation-countermeasures

+0

의 권고에 따라 성공적으로 로그인 한 후 수행 reset_session에 대한 호출로

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 

=> {}'를 임시 세션에 추가 하시겠습니까? – mikong

+0

세션에서 "current_user"키의 내용을 비우기 위해 수행되었습니다. –

0

그래, 당신이 (일이 생겼는지?입니다)에서 사용자를 로그인 한 후 세션을 다시 설정하는 것은 분명히 옳지 않다. 사용자를 로그인하기 전에해야할 일이 있습니다.

로그인을 실제로하기 전에 로그인하는 것이 좋지만 실제로는 확실하지 않습니다. auth_logic을 사용하면 auth_logic에 대한 경험이 많지 않습니다. auth_logic에 대한 정말 좋은 질문입니다. auth_logic을 사용하는 지원 티켓으로 제출하면됩니다.

그러나 그 동안, 당신은 단지 @user_session = current_client.user_sessions.new(params[:user_session]) 전에 액션 메소드의 상단, 에서 reset_session를 넣어 시도 할 수 있습니다. I 생각하면이 작동하고, 사용자 자격 증명이 유효하지 않은 경우 실제로 세션을 다시 설정하지 않아도되지만 세션을 재설정하면 심각한 문제가 발생할 수 있습니다. 으로 생각합니다. (어쩌면 인증 오류를 잃지 않는 한?)

그러나 여기서도 auth_logic 전문가가 아닙니다. 에 대한 전문 지식이 없기 때문에이 대답을 받아 들일 것으로 기대하지 않습니다.에 답해주십시오. 도움이되는 경우에 대비해서 생각하고 공유하는 방법에 대해 알려줄 것입니다. 참고로