HTTP 쿠키의 모든 것을 파헤쳐보자
HTTP 쿠키
: 서버가 특정 목적을 위해 브라우저 측에 저장하는 데이터
: "이름=값" 형태의 단순한 문자열 데이터로 HTTP 패킷의 헤더 영역을 통해 송수신
HTTP 쿠키의 메커니즘
: 서버에서 Set-Cookie 라는 응답헤더를 통해 브라우저가 수신해야할 쿠키 정보를 명시
: Set-Cookie에는 하나의 쿠키만 담을 수 있음 ("이름=값")
: 서버로 부터 응답을 받은 브라우저는 쿠키를 클라이언트의 컴퓨터 하드디스크에 저장하고 동일한 서버에 요청 시 저장한 쿠키를 Cooke라는 요청 헤더에 담아서 보냄 (헤더에는 ; 으로 여러 쿠키를 구분)
쿠키의 유효기간
: 브라우저가 쿠키를 헤더에 넣고 요청할 수 있는 기간은 서버에서 쿠키를 보낼때 결정
- 세션 쿠키
: 유효 기간이 별도로 명시되지 않은 쿠키
: 브라우저의 세션이 종료되었을때 함께 만료됨
: 브라우저의 탭이나 윈도우를 닫았을때 쿠키가 만료되며, 브라우저는 더이상 해당 쿠키를 서버로 보내지 않음
- 영속 쿠키
: 유효기간이 명시된 쿠키
: Set-Cooke의 Expires 혹은 Max-Age (초단위) 속성을 지정. 두 속성이 함께 있을 경우 Max-Age 속성이 우선
: 브라우저에 저장된 쿠키를 즉시 만료하려면 서버에서 Set-Cookie의 Max-Age를 0으로 지정하면 됨
쿠키의 적용 범위
: Set-Cookie의 Domain 속성을 통해 서브 도메인까지 포함되도록 범위를 확장할 수 있음
: Path 속성을 통해서 해당 도메인의 특정 경로로 상세하게 범위를 설정할 수 있음
쿠키의 필요성과 한계
- 필요성
: 클라이언트에 필요한 정보를 서버에 저장하지 않고 클라이언트에 저장함으로써 부담을 전가
- 한계
: 브라우저의 삭제 기능이나 폴더의 삭제를 통해 유실되기 쉽다
: 브라우저의 개발자 도구를 통해 어떤 쿠키가 존재하는지 확인할 수 있으며 이는 손쉽게 변경할 수 있다
: 클라이언트에 저장되기 때문에 해커에게 탈취되기 쉽다
쿠키의 대체 기술
: 웹 스토리지 (로컬 스토리지 / 세션 스토리지)를 통해 쿠키보다 안전하게 클라이언트에 데이터를 저장할 수 있다
: 웹 스토리지는 같은 브라우저 끼리만 공유 가능
- 로컬 스토리지
: 웹 페이지의 세션이 끝나도 남아있음 (탭과 창 간에 데이터를 공유할 수 있음)
- 세션 스토리지
: 웹 페이지의 세션이 끝날때 데이터가 삭제됨 (탭이나 창이 닫힐때 삭제)
쿠키의 보안 속성
- Secure
: 브라우저가 https 프로토콜 상에서만 쿠키를 보내도록 설정
- httpOnly
: 자바스크립트의 Document.cookie 객체를 통해 접근할 수 없도록하여 서드파티 코드가 쿠키에 접근하는 것을 방지
쿠키의 활용
: 서버에 세션을 저장하고 쿠키에는 세션을 구분할 수 있는 세션의 ID를 저장
: 클라이언트로부터 요청이 올때마다 서버는 쿠키의 세션 ID를 통해 어떤 사용자인지 등을 구분
: 이렇게하면 민감한 정보는 서버에 세션으로 저장되므로 보안을 유지할 수 있다
Reference