HTTP 쿠키는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 쿠키를 저장해놓았다가 동일한 서버에 재 요청시 저장된 데이터를 함께 전송한다.
쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아니지 확인할때 주로 사용된다. 이를 이용하면 stateless를 유지하면서 사용자의 로그인 상태를 유지할 수 있다.
쿠키는 주로 세가지 목적을 위해 사용된다.
과거에는 클라이언트 측에 정보를 저장할 때 쿠키를 사용하곤 했는데, 지금은 modern storage APIs를 사용해 정보를 저장하는 것을 권장한다. 모든 요청마다 쿠키가 함계 전송되기 때문에 성능이 떨어지는 원인이 될 수 있다.
서버는 HTTP 요청을 수신할 때, 응답과 함께 Set-Cookie 헤더를 전송하여 브라우저에 쿠키를 저장한다. Set-Cookie 헤더로 생성된 쿠키들은 같은 서버에 의해 만들어진 요청들의 cookie HTTP 헤더안에 포함되어 전송된다.
만료일 혹은 지속시간을 명시할 수 있고, 만료된 쿠키는 보내지지 않는다. 또 특정 도메인이나 경로 제한을 할 수도 있다.
쿠키의 라이프타임은 두가지 방법으로 정의 할 수 있다.
Secure쿠키
HttpOnly쿠키
쿠키의 스코프를 정의한다. Domain은 쿠키가 전송되게 될 호스트를 명시하고, Path는 Cookie 헤더를 전송하기 위하여 요청되는 URL 내에 반드시 존재해야 하는 URL 경로이다.
Domain이 명시되지 않는다면 현재 문서 위치의 호스트 일부를 기본값으로 하고, 서브도메인은 항상 포함된다.
쿠키가 cross-site 요청과 함께 전송되지 않았음을 요구하게 한다. 이를 통해 CSRF 공격에 대한 보호를 제공하지만, SameSite 쿠키는 실험중이고 아직 모든 브라우저에 의해 제공되지 않는다.
쿠키는 웹 어플리케이션에서 사용자와 인증된 세션을 식별하기 위해 사용되곤 하기 때문에, 쿠키를 가로채는 것은 인증된 사용자의 세션 하이재킹으로 이어질 수 있다. 쿠키를 가로채는 일반적인 방법은 XSS 취약점을 이용하는 것을 포함한다.
HttpOnly 쿠키 속성은 자바스크립트의 쿠키 값에 대한 접근을 막아 공격을 완화할 수 있다.
입력 필터링, 모든 민감한 동작에 필수로 요구되는 확인 절차가 항상 수행되도록 한다.
민감한 동작에 사용되는 쿠키는 짧은 수명만 갖도록 한다.
웹페이지는 다른 도메인의 서버 상에 저장된 이미지 혹은 컴포넌트를 포함할 수 있는데, 이러한 서드파티 컴포넌트를 통해 전송되는 쿠키를 서드파티 쿠키라고 부르며 광고와 트래킹에 주로 사용된다.