웹 브라우저의 캐시 - 쿠키
1. 개념
쿠키는 브라우저에 저장된 데이터 조각이다.
클라이언트에서 생성할수도 있고, 서버에서 생성할수도 있지만, 주로 서버에서 세팅하는 것이 권장된다.
클라이언트보다 서버의 보안이 더 우수하기 때문에, 클라이언트에서 쿠키를 세팅할 경우, 보안상 취약해질 수 있기 때문이다.
정해진 키워드가 있다.
서버에서는 Set-Cookie : key=value;[option] 을 통해서 http header 를 통해 클라이언트로 전달하고
클라이언트에서는 응답받은 값을 Cookie: key=value 를 통해서 서버로 전달한다.
자동설정 : 위의 키워드는 정해져있으므로 서버에서 쿠키를 설정해서 보내면, 클라이언트에서는 그 이후의 통신부터 자동으로 쿠키값이 헤더에 세팅되어 통신하게 된다.
최대 4kb 용량
사용처
주로 로그인 유지, 장바구니, 사용자 커스터마이징, 행동분석(개인화된 광고 등)에 이용된다.
2. 종류
쿠키는 서버에서 관리하는 것이 보통이며, 옵션에 따라 두 가지로 나뉘게 된다.
세션 쿠키
탭이나 창을 닫게 되면, 사라져버린다.
Max-Age 나 Expires 등의 옵션값을 설정하지 않는다.
영구 쿠키
탭이나 창을 닫더라도 사라지지 않고 계속 남아있다.
대신 Max-Age나 Expires 등의 옵션값을 통해 특정 기간이나 날짜가 지나면 만료되도록 관리한다.
3. 문법
secure
https 로만 쿠키를 주고받을 수 있게 한 옵션이지만,
Chrome 52 이상이나 Firefox 52 이상의 브라우저 등 일부 브라우저에는 보안을 강화하고 있어서 안전하지 않은 http 통신을 하는 사이트가 secure 설정으로 쿠키를 설정할 수 있도록 하는 것을 금지하기 위해서 이 사양을 무시한다.
httponly
공격자가 자바스크립트로 쿠키값을 빼낼 수 없도록 한 것이다.
실제로 브라우저의 콘솔창에서 자바스크립트로 쿠키값을 빼낼 수 있는데, 이 설정을 할 경우, document.cookie 로 쿠키값을 빼내서 접근할 수 없게 된다.
samesite
요청이 동일한 도메인에서 시작된 경우만 쿠키가 어플리케이션으로 전달되도록 허용한다.
4. 쿠키와 시큐어 코딩
쿠키-세션으로 로그인 처리를 한다면 시큐어 코딩이 필수적이다.
일정 시간을 두어 세션 타임아웃을 걸어야 한다.
httponly 옵션으로 자바스크립트로 쿠키값을 가져갈 수 없도록 해야한다.
cookie 에 세션 ID 를 담을 때, 사용자의 개인정보를 유추할 수 없는 값이어야 한다.
보통 업비트, 정부24, 금융권 사이트의 경우, 일정 시간을 두어 로그인을 자동으로 expire 시키도록 되어있는데, 이것들이 다 보안을 위함이다.
5. 쿠키 허용 관련 알림창
KISA 한국정보진흥원의 법에 따라서 서비스를 운용할 때, 쿠키값을 사용한다면, 사용자로부터 쿠키 사용에 대한 권한을 허가받아야 한다. 방문 기록을 추적할 때, 바로 이 쿠키가 사용되기 때문이다.
쿠키값이 사용자의 개인화된 맞춤광고 등 서비스 이용과는 별개의 영역에서 사용될 경우, 선택적으로 허용을 받도록 창을 띄울 수 있다.
Last updated