HTTP 쿠키


서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각.


목적

  • 세션 관리 : 서버에 저장해야할 로그인, 장바구니 등의 정보 관리
  • 개인화 : 사용자 선호, 테마 등의 세팅
  • 트래킹 : 사용자 행동을 기록하고 분석하는 용도


현재는 정보를 클라이언트 측에 저장하려면 Modern APIs의 종류인 웹스토리지 API(localStrorage, sessionStrogae 사용)


쿠키 만들기

Set-Cookie HTTP 응답 헤더는 서버로부터 사용자 에이전트로 전송

Set-Cookie: =

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry


쿠키의 라이프 타임

현재 세션이 끝날 때 삭제가 된다. 세션을 복원해 세션 쿠키가 무기한 존재할 수 있도록 한다.

명시된 날짜에 삭제되거나, Max-Age 속성에 명시된 기간 이후에 삭제된다.

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Secure과 HttpOnly 쿠키

Secure 쿠키는 HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 전송된다. (하지만 민감한 정보는 절대 쿠키에 저장되면 안된다.)

Cross-Site 스크립팅( XSS) 공격을 방지하기 위해, HttpOnly 쿠키는 JavasScript의 Document.cookie API에 접근할 수 없다. 따라서 서버쪽에서 지속되고 있는 세션의 쿠키는 JavaScript를 사용할 필요성이 없기 때문에 HttpOnly 프랠그가 설정될 것이다.

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly


쿠키의 스코프

Domain 그리고 Path 디렉티브는 쿠키의 스코프를 정의한다.

Domain은 쿠키가 전송되게 될 호스트들을 명시한다. 도메인이 명시되면, 서브 도메인들을 항상 포함된다. (Domain=mozilla.org 이면 developer.mozilla.org 와 같은 서브도메인 상에 포함)

Path=/docs

  • /docs
  • /docs/Web/
  • /docs/Web/HTTP


SameSite 쿠키

쿠키가 cross-site 요청과 함께 전송되지 않았음을 요구하게 만들어, cross-site 요청 위조 공격(CSRF)에 대해 어떤 보호 방법을 제공한다.

Document.cookie를 사용한 자바스크립트 접근

document.cookie = "yummy_cookie=choco";
document.cookie = "tasty_cookie=strawberry";
console.log(document.cookie);
// logs "yummy_cookie=choco; tasty_cookie=strawberry"

서버가 접근한 클라이언트를 식별하는 방법

서버는 접근한 클라이언트에게 response-header field인 set-cookie 값으로 클라이언트 식별자인 session-id를 발행한다.

서버로 발행된 session-id는 해당 서버와 클라이언트 메모리에 저장된다.

서버로부터 발행된 session을 통해 개인화를 위한 데이터로 활용할 수 있다.


첫번째 요청 시 클라이언트로부터 발송된 session-id가 없으므로 서버는 session-id를 생성해 클라이언트에게 발행한다.

두번째 요청 시 클라이언트는 서버로부터 발행된 session-id를 request-header cookie 값으로 포함하고 있다.

서버로부터 발행된 session-id는 해당 서버와 클라이언트 메모리에 저장된다. 이때 사용되는 cookie 타입은 세션 종료 시 같이 소멸되는 memory cookie가 사용된다.

클라이언트 접속 종료 시 서버에 저장된 session-id는 소멸된다.


https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies https://mohwaproject.tistory.com/entry/HTTP-Session-%EC%9D%B4%EB%9E%80