웹 브라우저를 이용한 HTTP 기반의 데이터 통신에서, 서버는 클라이언트의 상태를 유지하기 위해서 쿠키(cookie)를 사용한다.
세션(session)은 쿠키의 사용 방식 중 하나다. 서버는 클라이언트의 상태를 유지하기 위해서(예컨데 로그인 상태인지, 어떤 상품을 구매했는지, 이전에 어떤 페이지에 머물렀는지 등) 쿠키를 사용한다. 좋은 방법이긴 하지만, 중요 데이터가 인터넷을 가로지른다는 점과 유저의 PC에 저장이 된다는 점 때문에 위험한 방법이다. 간단한 정보는 상관 없지만, 유저의 아이디나 이메일등과 같은 개인정보를 쿠키로 주고 받는 것은 좋은 방법이 아니다.
중요한 정보는 서버의 데이터베이스에 저장하고, 유저에게는 정보를 조회할 수 있는 key를 쿠키로 담아보내면 어떨까 ? 예를 들어 유추하기 힘든 랜덤한 32byte 크기의 문자열을 쿠키에 담아서 보내는 거다. 쿠키에 담긴 이 정보는 로그인 할 때마다 랜덤하게 만들어지고 로그아웃하면 파기 된다. 이 정보가 누출된다고 하더라도 개인 정보를 담고 있지는 않으며, 로그아웃 후에는 파기 되므로 좀더 안전하게 사용 할 수 있을 것이다.
이게 세션이다. 쿠키에 담아보내는 이 랜덤한 유일한 키 값을 (솔류션 마다 조금씩 다르게 부르긴 하지만) Session-ID(세션 아이디)라고 한다.
세션 만들기
세션은 유추하기 힘들어야 하고(즉 랜덤해야 하고), 무차별 대입 공격을 견딜 수 있도록 충분히 커야 한다. 랜덤함수를 이용소 세션ID를 만드는 간단한 함수를 만들었다.
Contents
Session 과 Cookie
세션 만들기
세션의 단점
Secure Cookie
JWT
Recent Posts
Archive Posts
Tags