인증 / 보안_1. Cookie

Seoyong Lee·2021년 6월 29일
0
post-thumbnail

HTTP가 상태를 가지지 않는다면 어떻게 로그인이 유지될 수 있을까?

쿠키는 서버가 클라이언트에 전달하는 데이터로, HTTP에 대한 설명에서도 언급했듯이 무상태성(stateless)를 극복하기 위한 방법의 하나이다. 이러한 쿠키를 이용해 저장된 데이터는 특정 조건이 만족하는 경우에만 다시 불러올 수 있으며 이를 이용하면 브라우저에서 로그인 정보를 유지하거나 장바구니에 담긴 상품을 유지하는 등의 상태(state)를 가질 수 있다. 쿠키의 자세한 작동 방식은 다음과 같다.

작동 방식

  1. 클라이언트가 서버에 HTTP 요청을 보낸다.
  2. 서버는 요청한 데이터와 함께 쿠키를 HTTP 헤더에 담아 보낸다.
  3. 클라이언트는 받은 쿠키를 저장하고 쿠키를 포함하여 HTTP 요청을 다시 보낸다.
  4. 서버는 요청한 데이터를 보내며, 만약 바뀐 내용이 있다면 업데이트된 쿠키를 보낸다.

옵션

쿠키 설정을 위한 옵션은 다음과 같다.

  1. Domain: 포트 및 서브 도메인 정보, 세부 경로를 제외한 도메인 주소 ex) www.google.com
  2. Path: 서버 라우팅을 위한 세부 경로, 기본값은 '/' ex) /users/login
  3. MaxAge / Expires: 쿠키가 유효한 기간
  4. Secure: 프로토콜에 따른 쿠키전송 여부 ex) true -> HTTPS만 쿠키 전송
  5. HttpOnly: 자바스크립트에서 쿠키 접근 여부 ex) false(기본값) -> 접근 가능 -> XSS 공격 취약
  6. SameSite: Cross-Origin 요청을 받은 경우 쿠키 전송 옵션
    • Strict: same-site인 경우에만 쿠키 전송
    • Lax: Cross-Origin의 'GET' 메소드만 쿠키 전송
    • None: 항상 쿠키 전송

단점

쿠키는 오랜 기간 유지될 수 있으며 자바스크립트를 이용해 접근할 수 있기 때문에 비밀번호와 같은 정보를 담는 것은 보안상 위험하다. 이는 서버가 어떠한 요청을 받더라도 인증된 유저의 요청으로 보기 때문에 발생하는 문제로 로그인 등의 보안이 중요한 기능은 다음에 다룰 세션(Session)을 사용하여 구현한다.

참고
MDN - Set-Cookie
위키백과 - HTTP 쿠키

profile
코드를 디자인하다

0개의 댓글