HTTP 쿠키

김석규·2023년 1월 8일
0

HTTP 쿠키

목록 보기
1/2

HTTP 쿠키는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 쿠키를 저장해놓았다가 동일한 서버에 재 요청시 저장된 데이터를 함께 전송한다.

쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아니지 확인할때 주로 사용된다. 이를 이용하면 stateless를 유지하면서 사용자의 로그인 상태를 유지할 수 있다.

쿠키는 주로 세가지 목적을 위해 사용된다.

  • 세션관리 - 서버에 저장해야할 로그인, 장바구니, 게임 스코어 등의 관리
  • 개인화 - 사용자 선호, 테마 등의 세팅
  • 트래킹 - 사용자의 행동을 기록하고 분석한다.

과거에는 클라이언트 측에 정보를 저장할 때 쿠키를 사용하곤 했는데, 지금은 modern storage APIs를 사용해 정보를 저장하는 것을 권장한다. 모든 요청마다 쿠키가 함계 전송되기 때문에 성능이 떨어지는 원인이 될 수 있다.

서버는 HTTP 요청을 수신할 때, 응답과 함께 Set-Cookie 헤더를 전송하여 브라우저에 쿠키를 저장한다. Set-Cookie 헤더로 생성된 쿠키들은 같은 서버에 의해 만들어진 요청들의 cookie HTTP 헤더안에 포함되어 전송된다.

만료일 혹은 지속시간을 명시할 수 있고, 만료된 쿠키는 보내지지 않는다. 또 특정 도메인이나 경로 제한을 할 수도 있다.

쿠키의 라이프타임

쿠키의 라이프타임은 두가지 방법으로 정의 할 수 있다.

  • 세션 쿠키
    • 세션 쿠키는 현재 세션이 끝날 때 삭제된다. 현재 세션이 끝나는 시점은 브라우저가 정의한다.
  • 영속적인 쿠키
    • Expires 속성에 명시되거나 Max-Age 속성에 명시된 기간까지 보존된 후 삭제된다.

Secure와 HttpOnly 속성

  • Secure쿠키

    • Secure쿠키는 HTTPS 프로토콜 상에서 암호화된 요청일 경우에만 전송된다. 그러나 본질적으로 안전하지 않고, 실질적인 보안을 제공하는 것은 아니기 때문에 민감한 정보는 쿠키에 저장해선 안된다.
  • HttpOnly쿠키

    • HttpOnly쿠키는 자바스크립트에서 접근을 막는 것으로 XSS공격을 방지한다. HttpOnly쿠키는 서버에 전송되기만 한다.

Domain과 Path

쿠키의 스코프를 정의한다. Domain은 쿠키가 전송되게 될 호스트를 명시하고, Path는 Cookie 헤더를 전송하기 위하여 요청되는 URL 내에 반드시 존재해야 하는 URL 경로이다.

Domain이 명시되지 않는다면 현재 문서 위치의 호스트 일부를 기본값으로 하고, 서브도메인은 항상 포함된다.

SameSite 쿠키

쿠키가 cross-site 요청과 함께 전송되지 않았음을 요구하게 한다. 이를 통해 CSRF 공격에 대한 보호를 제공하지만, SameSite 쿠키는 실험중이고 아직 모든 브라우저에 의해 제공되지 않는다.

보안

세션 하이재킹과 XSS

쿠키는 웹 어플리케이션에서 사용자와 인증된 세션을 식별하기 위해 사용되곤 하기 때문에, 쿠키를 가로채는 것은 인증된 사용자의 세션 하이재킹으로 이어질 수 있다. 쿠키를 가로채는 일반적인 방법은 XSS 취약점을 이용하는 것을 포함한다.

HttpOnly 쿠키 속성은 자바스크립트의 쿠키 값에 대한 접근을 막아 공격을 완화할 수 있다.

CSRF(Cross-site 요청 위조)

입력 필터링, 모든 민감한 동작에 필수로 요구되는 확인 절차가 항상 수행되도록 한다.

민감한 동작에 사용되는 쿠키는 짧은 수명만 갖도록 한다.

트래킹과 프라이버시

  • 서드파티 쿠키
    쿠키는 그와 관련된 도메인을 가진다. 이 도메인이 현재 보고있는 페이지의 도메인과 동일하다면 그 쿠키를 퍼스트파티 쿠키라고 부른다. 만약 도메인이 다르다면 서드파티 쿠키라고 부른다.

웹페이지는 다른 도메인의 서버 상에 저장된 이미지 혹은 컴포넌트를 포함할 수 있는데, 이러한 서드파티 컴포넌트를 통해 전송되는 쿠키를 서드파티 쿠키라고 부르며 광고와 트래킹에 주로 사용된다.

  • Do-Not-Track(DNT 헤더)
    쿠키 사용에 대한 합법적이거나 기술적인 요구사항은 없지만 DNT 헤더는 웹 어플리케이션이 트래킹 또는 개인 사용자의 cross-site 사용자 트래킹을 비활성화 하는 신호로 사용될 수 있다.

기타

  • 좀비 쿠키와 Evercookies
    삭제 이후에 다시 생성되는 좀비 쿠키 혹은 "Evercookies"이며 의도적으로 영원히 제거하는 것이 어려운 쿠키가 있다. 쿠키가 존재 여부와 관계없이 그들 자신을 다시 만들어내기 위해 웹 스토리지 API, Flash 로컬 공유 객체 그리고 다른 기술들을 사용한다.

출처

HTTP 쿠키 - MDN Web Docs

profile
백엔드 개발자 지망생

0개의 댓글