쿠키(Cookie)
쿠키의 특징
- 쿠키는 서버가 어떤 데이터를 브라우저 측에 저장한 후 다시 그 데이터를 받아오는 기술 또는 그 데이터 자체를 뜻한다.
- 쿠키가 잘 작동하기 위해서는 브라우저의 역할이 중요하다.
- 쿠키는 서버에서도 클라이언트에도 생성할 수 있다.
- HTTP 메세지의 헤더를 통해 쿠키를 주고받는다
- 쿠키는 <이름>=<값> 형태이다.
- 서버는 Set-Cookie라는 응답 헤더에 쿠키 정보를 보냄
- 하나의 쿠키만 담을 수 있어서 여러개의 쿠키를 보낼 때는 아래와 같은 모습이 된다.// http 응답 서버 -> 브라우저Set-Cookie: <이름>=<값>Set-Cookie: <이름>=<값>Set-Cookie: <이름>=<값>// http 요청 브라우저-> 서버Cookie: <이름>=<값>; <이름>=<값>; <이름>=<값>
- 서버가 브라우저로 쿠키를 보내는 것은 일회성 작업이지만, 브라우저가 Cookie 헤더를 통해 서버로 쿠키를 돌려보내는 것은
일정 시간동안 반복해서 수행되는 작업이다. (서버가 브라우저에 쿠키 하나 심어 놓으면 그 후로 브라우저는 성실하게 매번 서버를 방문할 때마다 쿠키를 다시 가져온다)// http 응답 서버Set-Cookie: a=1Set-Cookie: b=2// http 요청 서버Cookie: a=1; b=2 - 해당 브라우저는 사용자가
www.test.com이라는 도메인에 머무는 한/index.html을 방문하든/about.html을 방문하든/contact.html을 방문하든 매번 같은 쿠키를 돌려줍니다.
쿠키의 한계
- 쿠키는 유실되기 쉽다.
- 개발자 도구에서 손쉽게 삭제 가능
- 쿠키는 변조되기 쉽다.
- 개발자 도구에서 손쉽게 변경 가능
- 쿠키는 도난되기 쉽다.
- 클라이언트 컴퓨터에 저장되어 해킹의 위험에 노출
쿠키의 생명주기
- 브라우저는 일정 시간동안 계속해서 서버로 쿠키를 돌려보낸다.
- 유효기간이 별도로 명시되지 않은 쿠키는
세션쿠키(session cookie)라고 부르는데 브라우저의 세션이 종료될 때 만료된다.즉, 브라우저 탭이나 윈도우를 닫으면 만료된다. - 유효기간이 명시되어 있는 쿠키는
영속쿠키(permanent cookie)라고 하여 특정 기간이나 특정 시점까지 유효하다. 유효기간의 명시 방법은Expires나Max-Age속성을 사용하면 된다.
Set-Cookie: <쿠키 이름>=<쿠키 값>; Expires=종료 시점Set-Cookie: <쿠키 이름>=<쿠키 값>; Max-Age=유효 기간
- Max-Age는 초단위로 설정하고, Expires와 Max-Age 속성이 둘다 있을 경우 Max-Age 속성이 우선된다.
- 브라우저에 저장해두었던 쿠키를 즉시 만료하고 싶을 때는
Max-Age속성을 0 처리하면된다.
쿠키의 적용범위
Domain
Set-Cookie: <쿠키 이름>=<쿠키 값>; Domain=도메인
Domain속성을 명시하면 서브 도메인까지 포함되도록 쿠키의 범위를 확장시킬수 있다.
예를 들어 Domain 속성을 test.com으로 설정하면 a.test.com으로 부터 받은 쿠키를 b.test.com으로도 보낼 수 있다.
Path
Set-Cookie: <쿠키 이름>=<쿠키 값>; Path=경로
path를 명시하면 쿠키의 범위를 해당 도메인의 특정 경로로 쿠키의 범위를 축소시킬 수 있다.
쿠키의 보안
Secure
Set-Cookie: <쿠키 이름>=<쿠키 값>; Secure
secure을 사용하면 브라우저가 https인경우에만 서버로 돌려보냄
HttpOnly
Set-Cookie: <쿠키 이름>=<쿠키 값>; HttpOnly
HttpOnly는 http를 제외한 js코드가 쿠키에 접근하지 못하도록 함
브라우저에서만 쿠키에 접근할 수 있게 함
이것을 사용하더라도 네트워크를 직접 감청하여 쿠키를 가로챌 수 있다. (https 사용하면 괜찮음 그래서 secure를 사용해야한다.)