devops

Cookie란 무엇인가. 본문

DevOps

Cookie란 무엇인가.

vata500 2022. 5. 3. 13:44
반응형

Cookie

서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단. 해당 도메인에 대해 cookie가 존재하면 자동으로 전송됨. HTTP는 기본적으로 Stateless 특징을 가지고 있음. 각 요청은 서로의 관계 상태를 모른다.

그러나 Cookie가 있어 로그인 상태 유지, 사용자 추적, 개인화 등 http의 stateless 특징을 stateful하게 만들어 준다.

쿠키는 삭제하지 않으면 사라지지 않음. (30일 동안 로그인 상태유지, 테마, 로그인 인증정보 등) HTTP 헤더를 통해서 포맷(json, txt 등) 설정과 요청이 가능하다.

Cokkie option

  • Domain : 서버와 요청의 도메인이 일치하는 경우 전송
  • Path : 서버와 요청의 세부경로가 일치하는 경우 전송
  • MaxAge or Expires : 쿠키의 유효기간 설정
  • HttpOnly : 스크립트의 쿠키 접근 가능 여부 결정
  • Secure : HTTPS 프로토콜에서만 쿠키 전송 여부 결정
  • SameSite : CORS 요청의 경우 옵션 및 메소드에 따라서 쿠키 전송 여부 결정

Domain

www.naver.com 와 같은 서버에 접속하는 도메인은 쿠키 옵션에서 포트 및 서브 도메인 정보, 세부 경로를 포함하지 않는다.

만약 요청할 URL이 http://www.naver.com:30/user/login 이라면 Domain은 naver.com 이다. 만약 쿠키에서 도메인 정보가 존재하면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있다.

Path

세부 경로는 서버가 라우팅할 때 사용하는 경로다. Path의 특징은 설정된 Path를 전부 만족하는 경우 요청하는 Path가 추가로 존재하더라도 쿠키를 서버에 전송할 수 있다.

즉 Path가 /usrs고 요청하는 세부 경로가 /users/login 이라면 쿠키 전송이 가능하다. 그러나 /user/login으로 전송되는 요청은 Path 옵션을 만족하지 못하기 때문에 서버로 쿠키를 전송할 수 없다.

MaxAge or Expires

쿠키가 유효한 기간을 정하는 옵션이다. 지정된 시간을 초과하면 쿠키는 자동으로 파괴된다.

Secure

쿠키를 전송해야할 때 사용하는 프로토콜에 따른 쿠키 전송 여부를 결정한다. 이 옵션이 true라면 HTTPS 프로토콜을 이요하는 경우에만 쿠키를 전송할 수 있다.

HttpOnly

자바스크립트에서 브라우저의 쿠키 접근 여부를 결정한다. 이 옵션이 true라면 자바스크립트에서는 쿠키에 접근이 불가능하다.

default값은 false다. 이 경우, 자바스크립트에서 쿠키에 접근이 가능하므로 XSS 공격에 취약하다.

XSS(Cross Site Scripting, XSS)
공격자가 상대방의 브라우저에 스크립트가 실행되도록 해 사용자의 세션을 가로채거나, 웹사이트를 변조하거나, 악의적 콘텐츠를 삽입하거나, 피싱 공격을 진행하는 것을 말한다

SameSite

Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정한다.

- Lax : CrossOrigin 요청이면 GET 메소드에 대해서만 쿠키를 전송할 수 있다.
- Strict : CrossOrigin이 아닌 same-site인 경우메나 쿠키를 전송할 수 있다.
- None : 항상 쿠키를 보내줄 수 있다. (Secure 옵션 필요)

Cookie 이용한 상태 유지

쿠키의 특성을 이용하여 서버는 클라이언트에 인증정보를 담은 쿠키를 전송, 클라이언트는 전달받은 쿠키를 요청과 같이 전송하여 Stateless한 인터넷 연결을 Stateful하게 유지가능하다.

쿠키는 오랜 시간 유지될 수 있고, 자바스크립트를 통해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험하다.

반응형
Comments