[기초 이론] 4. 쿠키와 세션
이 포스트는 인프런의 반드시 알고 넘어가야 할 웹 기술 기초편 을 보고 작성하였습니다!
-
쿠키 : 지속 쿠키
-
세션 : 세션 쿠키
4-1. 쿠키
- 상태유지및관리, 사용자 인증 수단
-
나의 대한 상태 정보가 유지되기 위해 쿠키를 사용
-
쿠키를 통해 사용자 식별 및 세션 유지를 통해 클라이언트와 서버간의 상태관리
∨ 쿠키 헤더 구조 : 서버에서 클라이언트로 쿠키 발급 시 Set-Cookie 헤더에 의해 쿠키값 세팅
-
해당 사이트에 접근할 때마다, 클라이언트는 Set-Cookie 에 의해 세팅 된 값을 Cookie 헤더에 세팅해 요청메세지 전달
-
서버는 이를 통해 상태를 관리
- 구조
<Set-Cookie 헤더 구조>
Set-Cookie: name=value [; expires=date][; path=path][; domain=domain][; secure]
<Cookie 헤더 구조>
Cookie: name1=value1 [; name2=value2][; name3=value3] ......
(1) 쿠키(지속 쿠키)
: 웹 서버에서 발급 시 클라이언트 하드 디스크에 텍스트 형태로 저장.
-
클라이언트 PC사용자는 해당 쿠키 정보를 열람가능하다.
①쿠키 발급 과정
-
예시: 지속 쿠키를 기반으로 로그인 기능을 사용한다.
1) 로그인 요청
2) ID, PW 가 정상값이면 로그인이 된다.
3) Set-Cookie 값이 설정된다.
4) 클라이언트는 해당 사이트에 대한 쿠키 값을 세팅한다.
5) 웹 브라우저는 쿠키 헤더를 통해 쿠키 값을 세팅한다.
6) 서버는 쿠키 헤더를 통해 사용자를 식별한다.
7) DB에서 정보를 뽑아서 출력한다.
② 쿠키 폐기 과정
- 예시: 로그아웃의 경우에 사용한다.
1) 로그아웃 요청
2) 서버가 Set-Cookie 로 응답을 보낼때, 내용에 DELETED를 넣어보낸다.
3) 사용자 PC에 있는 쿠키값을 삭제한다.
③ 문제점
- 쿠키를 폐기하더라도 해당 값을 알고 있으면 재사용이 가능하다.
- 쿠키 값이 평문일 경우 변조의 위협이 있다.
→ 식별 인증 관리 시 암호화 과정을 거쳐야 한다.
④ 개선 방법
- 유효 기간에 따른 폐기방법, 암호화 알고리즘의 적절성을 검토해 쿠키 발급 로직을 구현해야한다.
-
발급 시 고려사항: 유효기간 처리, 양방향 암호화 알고리즘 종류, 비밀키 보관방법
* 쿠키 값을 세팅할 때 복호화를 통해 권한, IP, 사용자를 알 수 있기 때문에 복호화가 가능해야한다.
따라서 양방향 알고리즘을 적용한다. → 키 값이 필요하다.
(2) 세션(세션 쿠키)
: 웹 서버에서 발급 시 클라이언트 웹 브라우저 캐시에 저장
-
정상적으로 로그인 시 서버에 해당 세션에 대한 정보를 저장한다.
-
저장 방법: 메모리, 파일 SYSTEM, 데이터베이스
* 일반적으로 메모리에 저장한다.
-
세션은 암호화, 난독화가 되지 않는다.
⇒ 임의의 문자들이 무작위로 나열되어 공격자 측에서 특정 사용자의 세션을 추측하기 힘들다.
①세션 발급 과정
-
예시: 최초 로그인 시
1) 의미 없는 세션 값이 로그인이라는 기능을 통해 맵핑 정보가 담긴다.
2) 세팅을 해놓으면, Set-Cookie 를 이용해 웹 브라우저에 올리기 위해 PHPSESSID에 세션값을 쓴다.
3) Cookie 헤더를 통해 세션 값을 쓴다.
4) 서버는 찾아 정보를 출력한다.
② 세션 폐기 과정
- 로그아웃 버튼 클릭 시, 서버 세션에 저장된 정보를 없앤다.
⇒ 세션 값을 의미없는 세션이 된다.
∨ 폐기 후 재사용의 문제가 없다.
지속 쿠키는 왜 필요할까?
-
편리성: 지속 쿠키 < 세션 쿠키
-
서버 부하율: 지속 쿠키 < 세션 쿠키
큰 사이트의 경우 많은 세션값이 필요해, 서버에 과부하가 걸린다.
따라서 서버에 부담이 적은 지속 쿠키를 사용한다.