오늘의 드림핵 강의- Background: Cookie & Session
공부한 날 : 23/03/14
쿠키
- HTTP에서 상태를 유지하기 위하 쿠키(Cookie)가 탄생하게 되었다.
- 쿠키는 key와 value로 이루어진 일종의 단위이다.
- 서버가 클라이언트에게 쿠키를 발급하면, 클라이언트는 서버에 요청을 보낼 때마다 이전에 발급 받은 쿠키를 같이 전송하고, 이를 통해 서버는 클라이언트를 구분할 수 있게 된다.
- 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용된다
HTTP의 특징
- Connectionless : 하나의 요청에 하나의 응답을 한 후, 연결을 종료한다. 새 요청이 있을 때마다 새로운 연결을 맺는다.
- Stateless : 통신이 끝난 후 상태 정보를 저장하지 않는다. 따라서 이전 연결에서 사용한 데이터를 이후의 연결에서 사용할 수 없다.
쿠키가 없는 통신
-> 서버를 요청을 보낸 클라이언트가 누구인지 알 수 없다
쿠키가 있는 통신
-> 클라이언트는 요청을 보낼 때마다 쿠키와 함께 보내게 되고, 서버는 이 쿠키를 통해 클라이언트를 식별할 수 있다
쿠키는 변조가 가능하다! 따라서 쿠키만을 이용하여 클라이언트의 인증 정보를 식별한다면 사칭을 통한 정보 탈취가 가능하다.
세션
- 클라이언트가 쿠키를 이용하여 인증 정보를 조작할 수 없도록 세션을 사용한다.
- 인증 정보를 서버에 저장하고, 해당 정보에 접근할 수 있는 키를 만들어 클라이언트에게 전달한다.
-> 해당 키를 session id라고 부른다.
- 브라우저는 session id를 쿠키에 저장하고 이후 HTTP 요청을 보낼 때 사용한다.
- 서버는 요청에 포함된 session id 데이터를 가져와 인증 상태를 확인한다.
쿠키 적용법
- 쿠키는 클라이언트에 저장되기 때문에 클라이언트는 저장된 쿠키를 조회, 수정, 추가할 수 있다.
- 클라이언트가 서버에 요청을 보낼 때 저장된 쿠키를 요청 헤더에 넣어 보내기 때문에 쿠키 헤더 또한 변조가 가능하다.
- 만료 시간 지정 가능, 만료 시간 이후에는 클라이언트에서 쿠키가 삭제되며 이는 브라우저 측에서 관리된다.
세션 하이재킹(Session Hijacking)
-> 공격자가 이용자의 쿠키를 훔쳐 세션 인증 상태를 훔치는 것
-> 쿠키에는 세션 정보가 저장되어 있기 때문에 쿠키를 훔침으로써 세션 인증 상태를 훔치는 것이 가능하다.