2011-03-29 3 views
6

현재 로그인 한 사용자의 유형을 session[:user_type]에 저장하려고 생각했습니다. 옵션은 "admin", "end_user", "demo"(앞으로 더 많은 사용자 유형을 추가 할 수 있음)입니다.레일 : "세션"에 데이터를 저장하는 것이 안전합니까?

레일즈 3 애플리케이션에서 그렇게하는 것이 안전한지 궁금합니다.

사용자가 session[:user_type]을 "demo"에서 "admin"으로 어떻게 변경할 수 있습니까? 이 스레드에서

답변

5

그것은 당신의 세션 저장소의 따라 달라집니다.
기본적으로 쿠키를 세션 저장소로 사용하므로 기본적으로 안전하지 않으므로 쿠키 내용을 변경하기가 쉽습니다.

그래서 당신은 할 수 중 하나

  • 변화 세션 설정/초기화/session_store.rb에 저장하고 액티브 저장소를 사용하거나 memcache에 저장 (그래서는 DB에 저장 될 것입니다). 세션 저장소로 redis, mongodb 등을 사용할 수있게 해주는 많은 github 플러그인이 있습니다.
  • 이 정보를 db에 저장하고 application_controller에서 before_filter를 사용하여 현재 사용자 ID를 얻고 전체 사용자를 얻습니다 변수에있는 객체 @current_user
+0

하나의 질문 : 사용자 ID가 쿠키에 저장되어있는 경우 사용자가이를 변경하려고 시도 할 수 없습니까? (여러 번 시도한 후에 관리자 아이디를 추측 할 수 있습니다.) –

+2

@Misha. 맞아, user_id는 조작 될 수 있기 때문에 쿠키에 있어서는 안된다. 그러나 user_id를 세션에 저장하고 cookie_store를 사용하지 않으면 Mike의 첫 번째 대안처럼 문제가 발생하지 않습니다. – oma

+5

이것은 완전히 정확하지 않습니다 (아래의 ThoKra가 링크 된 기사를 읽으십시오). Rails는 다이제스트로 쿠키에 서명하고 다이제스트가 일치하지 않으면 세션 값에 대해 nil을 반환하므로 최종 사용자가 쿠키에 저장되어 있어도 세션 값을 변경할 수 없습니다. –

관련 문제