내 앱에는 User
모델이 있고 rememberable_token
열이 있습니다. 사용자를 생성 할 때, 임의의 보안 문자열은 사용자에 대한 보안 토큰으로서 작용하는 before_create
필터에 저장된다 : 세션 제어기세션 쿠키에 관한 Ruby on Rails 보안
user.rememberable_token = SecureRandom.urlsafe_base64
, 그 때문에 그 토큰의 값에 영구 쿠키를 생성
세션 컨트롤러 :
def create
.
.
cookies.permanent.signed[:permanent_user_session] = user.rememberable_token
end
def logout
cookies.delete :permanent_user_session
redirect_to root_url
end
공동 그들이 logout
작업을 통해 로그 아웃 할 때 사용자가 로그 아웃됩니다 만 브라우저를 닫을 때 로그 아웃 및되지 않습니다 okie는 응용 프로그램 제어기에서 현재 사용자가 있는지 판별하고 일부 제어기에서 사용자가 로그인되어 권한이 있는지 판별하는 데 사용되는 before_filter에 사용됩니다.
응용 프로그램 컨트롤러 :
def current_user
@current_user ||= User.find_by_rememberable_token(cookies.signed[:permanent_user_session]) if cookies.signed[:permanent_user_session]
end
def authorize
unless User.find_by_rememberable_token(cookies.signed[:permanent_user_session])
render :action => 'login'
end
end
이 안전하거나 세션 하이재킹하는 경향이 경우 경우 문제는? 하이재킹이 발생하기 쉬운 경우 session#logout
메서드에서 기존 쿠키를 삭제하기 직전에 사용자에 대한 새로운 rememberable_token을 만들었지 만 (해당 값으로 새 쿠키를 만들지는 않은 경우) 괜찮습니까?
감사합니다.
사용자가 일주일 동안 로그인 상태를 유지하면 쿠키를 훔친 사람은 누구나 세션을 도용 할 수 있습니다. 이게 걱정 스러운가, 아니면 어떤 유형의 로그인 세션 쿠키로 실제로 가능합니까? – ilmhlueq
이것은 세션 쿠키의 취약점이 아닙니다. 서버 측에서 세션을 유지하고 쿠키의 세션 ID 만 유지하는 경우에도 동일합니다. 30 분마다 세션이 만료 될 수 있지만 각 요청마다 타이머가 재설정됩니다. 이렇게하면 공격자가 공격을 수행하는 데 30 분의 간격 만 제공되지만 사용자를 몇 주 동안 로그인 상태로 유지할 수있는 기능도 제거됩니다. – Eduard
또한주의하십시오. 데이터베이스에 영구 로그인 쿠키 (토큰) 만 저장하지 마십시오. 로그인 토큰은 Password Equivalent (암호 등가)이므로 공격자가 데이터베이스에 손을 대면 토큰을 사용하여 마치 일반 텍스트 로그인 - 암호 조합처럼 토큰을 사용하여 모든 계정에 로그인 할 수 있습니다. 따라서 지속적인 로그인 토큰을 저장할 때 강력한 salt 해시 (bcrypt/phpass)를 사용하십시오. 이 항목과이 항목에서 찾을 수있는 로그인에 대한 자세한 내용은 다음과 같습니다. http://stackoverflow.com/questions/549/the-definitive-guide-to-forms-based-website-authentication – Eduard