😊
Cookie
November 13, 2022
쿠키란?
- http는 stateless한 특징을 가지고 있다
- cookie는 서버에서 브라우저에게 보내는 데이터이다. 보통 유저를 식별하는 용도로 사용되어 브라우저에서 서버에 request를 보낼때 cookie를 넣어서 보내면 서버에서 어떤 브라우저가 요청을 보냈는지 구분할때 사용된다. => cookie를 사용하면 http를 stateful하게 사용할 수 있다
- 일반적으로
- 세션 관리
- 유저 세팅
- 유저 행동을 tracking하기 위해 사용된다
쿠키 생성
- 서버에서 http request 받은 후 Set-Cookie 헤더에 1개 이상의 쿠키를 넣어서 보낸다
- 브라우저는 해당 쿠키를 저장한 후 서버에 request를 보낼때 마다 쿠키를 같이 보낸다
- 서버에서는 domain, path로 쿠키를 받을 수 있는 곳을 제한하거나 expiration date로 쿠키가 보내질 수 있는 시간을 제한할 수 있다
쿠키 lifetime
- permanent cookie는 expiration date가 명시되어 있으면 해당 date 이 후 삭제된다
- session cookie는 브라우저에서 세션 종료 요청을 서버에 보낼 시 session이 종료되면서 삭제된다
쿠키 접근제한
- HTTPS인 경우 브라우저가 서버에 Secure 옵션과 쿠키를 같이 보내는데 이렇게 보낼 경우 man in the middle attack에 보호가 되어 중간에 쿠키를 쉽게 가로챌 수 없게된다
- HttpOnly 속성을 포함한 쿠키는 Javascript Document.Cookie API로 접근할 수 없게 되어 XSS 공격에 안전하다
Domain
- Domain 속성은 어떤 호스트에서 쿠키를 받을 수 있는지에 대한 정보를 갖는다. 해당 속성을 기입하지 않은 경우 subdomain을 제외한 쿠키를 설정하는 host와 같은 host 에서만 쿠키를 받을 수 있다 (host domain: aaa.com, subdomain: bbb.aaa.com)
- Domain 속성을 작성하면 subdomain에서도 쿠키를 받을 수 있다
Path
- Path 속성은 request를 보낸 URL이 가져야할 path 정보이다. 예를 들어 Path=/docs 인 경우 /docs/test 와 같이 request URL이 /docs를 가지고 있어야지 Cookie header를 해당 host에 보내줄 수 있게 된다
SameSite
- 서버에서 cross-site request를 허용하는 지에 대한 정보를 가지고 있는 속성이다 (cross-site request는 다른 domain에서의 요청이다)
- CSRF 공격에 보호하기 위해 사용된다
- default는 Lax이고 Strict, None 옵션을 줄 수 있다
- Strict는 same site
- Lax는 same site + 유저가 쿠키의 origin site로 이동 했을때
- None은 same site + cross site
쿠키 prefix
- 쿠키에 prefix를 주어서 어떤 경우 Set-Cookie header에 쿠키가 넣어지는지 명시 할 수 있다
- __Host- = Secure 속성 포함 + secure origin + Domain 속성 없음 + Path=/ 인 경우 (요 속성은 domain에 제한된 속성이라고도 불린다)
- __Secure- = Secure 속성 포함 + secure origin 인 경우
쿠키 관련 규정
- 글로벌로 적용되는 규정에는 아래와 같은 것이 포함되어 있다
- 유저가 쿠키 수집을 거부할 수 있어야함
- 사이트에서 쿠키가 사용되는지 알려야함
- 쿠키 없이 유저가 서비스의 대부분을 사용할 수 있어야함
끝
😊