cookie

1. 쿠키의 정의

웹사이트의 정보를 브라우저 쪽에 저장하는 작은 파일. 서버가 클라이언트에게 ‘이 파일을 보관해줘’라고 쿠키 저장을 지시한다. 이 기록 파일에 담긴 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다. 클라이언트는 서버가 보낸 쿠키를 저장하고, 같은 URL로 접속할 때 저장된 쿠키를 읽고 요청 헤더에 넣는다.

2. 쿠키의 잘못된 사용법

2.1 영속성 문제

쿠키는 어떠한 상황에서도 확실하게 저장되는 것은 아니다. 비밀 보드나 브라우저의 보안 설정에 따라 세션이 끝나면 초기화되거나 쿠키를 보관하라는 서버의 지시를 무시하기도 한다. 방문 기록 삭제 메뉴나 개발자 도구 등으로 삭제되는 경우도 있다. 다시 말해, 서버가 쿠키를 데이터베이스 대신으로 쓸 수는 없다. 쿠키가 초기화되면 데이터는 사라진다. 그러므로 사라지더라도 문제가 없는 정보나 서버 정보로 복원할 수 있는 자료를 저장하는 용도에 적합하다.

2.2 용량 문제

쿠키의 최대 크기는 4킬로바이트 사양으로 정해져 있어 더 보낼 수 는 없다. 쿠키는 헤더로서 항상 통신에 부가되므로 통신량이 늘어나는데, 통신량 증가는 요청과 응답 속도 모두에 영향을 미친다. 제한된 용량과 통신량 증가는 데이터베이스로 사용하는데 제약이 된다.

2.3보안 문제

secure 속성을 부여하면 https 프로토콜로 암호화된 통신에서만 쿠키가 전송되지만, HTTP 통신에서는 쿠키가 평문으로 전송된다. 따라서 보여서는 곤란한 비밀번호 등이 포함되면 노출될 위험성이 있다. 암호화된다고 해도 사용자가 자유롭게 접근할 수 있는 것도 문제이다. 원리상 사용자가 쿠키를 수정할 수도 있으므로 민감한 정보를 넣는 것은 적합하지 않다. 정보를 넣을 때는 서명이나 암호화 처리가 필요하다.

3. 쿠키 제어

  • Expires, Max Age: 쿠키의 수명을 설정. Max-Age는 초 단위로 지정. 현재 시각에서 지정된 초수를 더한 시간에서 무효가 된다. Expires는 2019-07-11T03:06:26.000Z 같은 문자열을 해석한다.
  • Domain 속성: 클라이언트에서 쿠키를 전송할 대상 서버. 생략하면 쿠키를 발행한 서버의 경로다.
  • Secure 속성: https로 프로토콜을 사용한 보안 접속일 때만 클라이언트에서 서버로 쿠키를 전송한다. 쿠키는 URL을 키로 전송을 결정하므로, DNS 해킹으로 URL을 사칭하면 의도치 않은 서버에 쿠키를 전송할 위험이 있다. Secure 속성을 붙이면 http 접속일 때는 브라우저가 경고를 하고 접속하지 않아 정보 유출을 막게 된다.
  • HttpOnly 속성: 쿠키를 소개할 때 쿠키를 자바스크립트로 다룰 수 있다고 설명했지만, 이 속성을 붙이면 자바스크립트 엔진으로부터 쿠키를 감출 수 있다.

refs