[MDN 번역] HTTP cookies

hyeongjundev·2021년 11월 27일
0

MDN 번역

목록 보기
2/3

HTTP cookie(웹 쿠키, 브라우저 쿠키)는 서버가 user의 웹 브라우저에게 보내는 data의 작은 부분이다. 브라우저는 데이터를 저장하고 나중에 있을 request에 같은 서버에게 다시 돌려줄 것이다. 전형적으로 쿠키는 같은 브라우저에서 온 요청인지 확인하는 용도로 사용했다-예를들면, 유저의 로그인을 유지하기 위해서. 쿠키는 stateless HTTP protocol를 위해서 stateful 정보를 기억한다.

쿠키는 주로 아래 3가지 목적으로 사용된다.

Session management
로그인, 장바구니, 게임 점수, 또는 서버가 기억해야하는 어떤 것인든

Personalization
유저 설정,테마, 그 외

Tracking
유저의 행동을 기억하고 분석해야하는 것

쿠키는 주로 client-side의 저장소로 사용되었다. client에 데이터를 저장하는 방법이 유일하였을 때는 괜찮았지만, 현재는 storage API를 권장한다. 쿠키는 모든 request에서 보내질 수 있다. 그래서 성능이 나빠질 가능성이 있다. (특히 mobile data connection). 현대 client storage를 위한 API는 Web Storage API (localStorage 와 sessionStorage) 와 IndexedDB 이다.

Creating cookies

HTTP request를 받은 이후, 서버는 하나 또는 더 많은 Set-Cookie 헤더를 response와 같이 보낼 수 있다. 쿠키는 보통 브라우저에서 저장하며 쿠키는 같은 서버에 Cookie HTTP header에 request와 같이 보내진다. 만료 시간은 특정지을 수 있으며 만료 후에는 더이상 쿠키를 보내지 않는다. 특정 domain과 path의 추가 제한을 설정할 수 있다. (cookie가 보내지는 곳을 제한할 수 있다.) 자세한 것은 Set-Cookie 를 참조

Set-Cookie HTTP response 헤더는 server로 부터 user agent로 cookie를 보낸다.

Set-Cookie: <cookie-name>=<cookie-value>

아래는 서버가 header를 보내 client에 cookie 쌍을 저장하라고 한다.

HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

[page content]

그리고 브라우저는 cookie를 저장하기 전에 Cookie 헤더를 이용하여 server에 응답한다.

GET /sample_page.html HTTP/2.0
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cokkie=strawberry

쿠키의 lifetime은 아래와 같이 정의할 수 있다.

  • Session cookie는 현재 seesion이 끝날 때 제거된다. 브라우저는 current session이 끝나는 때를 정의한다. 그리고 몇몇의 브라우저는 session cookie과 무기한 지속될 수 있게 restart 때 session restoring을 사용한다.
  • 영구적인 쿠키는 Expires 또는 Max-Age 속성에 위해서 특정 시간에 제거된다.
Set-Cookie: id=a3fWa; Expires=Thu, 31 Oct 2021 07:28:00 GMT;
Note : Expire data는 서버가 아닌 클라이언트의 시간에 달려있다.

만약 너의 사이트가 user를 인증한다면 user 인증이 일어날 때 마다 이미 존재하더라도 session cookie를 다시 생성하고 보내야한다. 이 기술은 third party가 user의 session을 다시 사용하는 session fixation attack을 막아주는 것을 도와준다.

Restrict access to cookies

안전하게 전달받고 의도하지 않은 스크립트에서 접근하지 못하게하여 쿠키를 안전하게 하는 다양한 방법이 있다. Secure attribute와 HttpOnly attribute가 있다.

Secure attribute와 함께 있는 cookie는 HTTPS protocol(HTTP가 아니다) 넘어 암호하된 request로 보내질 수 있다. 그러므로 man-in-the-middle attacker로 부터 접근하는 것을 쉽지 않게 한다. 안전하지 않은 사이트(http:) 는 Secure attribute 속성을 가진 쿠키는 설정할 수 없다. 그러나 Secure 가 모든 접근을 막는다고 가정하지 말아라. 예를 들면 이것은 client의 하드 디스크에 접근해서(또는 JavaScript 만약 HttpOnly 속성이 설정되어 있지 않다면) 읽거나 수정될 수 있다.

HttpOnly attribute를 가진 쿠키는 JavaSCript의 Document.cookie를 통해서 접근할 수 없다. 예를들면 서버 사이드 session에서 유지하는 쿠키는 JavaScript에서 접근할 필요가 없다. 그래서 HttpOnly 속성이 필요하다. 이 precatuion은 cross-site scripting(XSS) attack을 완하한다.

Set-Cookie: id=a3fWa; Expires=Thu, 21 Oct~~~ ; Secure; HttpOnly

Define where cookies are sent

Domain과 Path attribute는 쿠키의 scope를 정의한다.

Domain attribute

0개의 댓글