웹 브라우저의 캐시 - 쿠키

1. 개념

  • 쿠키는 브라우저에 저장된 데이터 조각이다.

  • 클라이언트에서 생성할수도 있고, 서버에서 생성할수도 있지만, 주로 서버에서 세팅하는 것이 권장된다.

    • 클라이언트보다 서버의 보안이 더 우수하기 때문에, 클라이언트에서 쿠키를 세팅할 경우, 보안상 취약해질 수 있기 때문이다.

  • 정해진 키워드가 있다.

    • 서버에서는 Set-Cookie : key=value;[option] 을 통해서 http header 를 통해 클라이언트로 전달하고

    • 클라이언트에서는 응답받은 값을 Cookie: key=value 를 통해서 서버로 전달한다.

    • 자동설정 : 위의 키워드는 정해져있으므로 서버에서 쿠키를 설정해서 보내면, 클라이언트에서는 그 이후의 통신부터 자동으로 쿠키값이 헤더에 세팅되어 통신하게 된다.

  • 최대 4kb 용량

  • 사용처

    • 주로 로그인 유지, 장바구니, 사용자 커스터마이징, 행동분석(개인화된 광고 등)에 이용된다.

2. 종류

쿠키는 서버에서 관리하는 것이 보통이며, 옵션에 따라 두 가지로 나뉘게 된다.

  1. 세션 쿠키

    1. 탭이나 창을 닫게 되면, 사라져버린다.

    2. Max-Age 나 Expires 등의 옵션값을 설정하지 않는다.

  2. 영구 쿠키

    1. 탭이나 창을 닫더라도 사라지지 않고 계속 남아있다.

    2. 대신 Max-Age나 Expires 등의 옵션값을 통해 특정 기간이나 날짜가 지나면 만료되도록 관리한다.

3. 문법

// Some code
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<non-zero-digit>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path-value>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Strict
  • secure

    • https 로만 쿠키를 주고받을 수 있게 한 옵션이지만,

    • Chrome 52 이상이나 Firefox 52 이상의 브라우저 등 일부 브라우저에는 보안을 강화하고 있어서 안전하지 않은 http 통신을 하는 사이트가 secure 설정으로 쿠키를 설정할 수 있도록 하는 것을 금지하기 위해서 이 사양을 무시한다.

  • httponly

    • 공격자가 자바스크립트로 쿠키값을 빼낼 수 없도록 한 것이다.

      • 실제로 브라우저의 콘솔창에서 자바스크립트로 쿠키값을 빼낼 수 있는데, 이 설정을 할 경우, document.cookie 로 쿠키값을 빼내서 접근할 수 없게 된다.

  • samesite

    • 요청이 동일한 도메인에서 시작된 경우만 쿠키가 어플리케이션으로 전달되도록 허용한다.

4. 쿠키와 시큐어 코딩

쿠키-세션으로 로그인 처리를 한다면 시큐어 코딩이 필수적이다.

  1. 일정 시간을 두어 세션 타임아웃을 걸어야 한다.

  2. httponly 옵션으로 자바스크립트로 쿠키값을 가져갈 수 없도록 해야한다.

  3. cookie 에 세션 ID 를 담을 때, 사용자의 개인정보를 유추할 수 없는 값이어야 한다.

보통 업비트, 정부24, 금융권 사이트의 경우, 일정 시간을 두어 로그인을 자동으로 expire 시키도록 되어있는데, 이것들이 다 보안을 위함이다.

5. 쿠키 허용 관련 알림창

  • KISA 한국정보진흥원의 법에 따라서 서비스를 운용할 때, 쿠키값을 사용한다면, 사용자로부터 쿠키 사용에 대한 권한을 허가받아야 한다. 방문 기록을 추적할 때, 바로 이 쿠키가 사용되기 때문이다.

  • 쿠키값이 사용자의 개인화된 맞춤광고 등 서비스 이용과는 별개의 영역에서 사용될 경우, 선택적으로 허용을 받도록 창을 띄울 수 있다.

Last updated