본문 바로가기

공부 자료/Spring

[Spring Security] Cookie

[Cookie]

: 서버에서 클라이언트에 데이터를 저장하는 방법의 하나

 

- 서버 -> 클라이언트 / 클라이언트 -> 서버  로 쿠키 전송이 가능함

 

 

[특징]

: 서버가 클라이언트에 데이터를 저장할 수 있으나, 저장된 이후에는 특정 조건을 만족할 경우 데이터를 가져올 수 있음

 

1. Domain

: www.google.com과  과 같은 서버에 접속할 수 있는 이름

: 쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보, 세부 경로를 포함하지 않음

 

- 쿠키 옵션에서 도메인 정보가 존재한다면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있음

 

 

2. Path

: (세부 경로는) 서버가 라우팅 할 때 사용하는 경로

: 명시하지 않을 경우 기본으로 / 으로 설정

 

- path를 전부 만족하는 경우 Path가 추가로 더 존재하더라도 쿠키를 서버에 전송할 수 있음

즉, 세부 경로를 포함하고 있기만 하면 됨

 

 

3. MaxAge or Expires

: 쿠키가 유효한 기간을 정하는 옵션

: 쿠키가 영원히 남아있을 경우 탈취 위험성이 커지기 때문에 보안 측면에서 중요함

 

- 세션 쿠키(Session Cookie)

: MaxAge 또는 Expires 옵션이 없는 쿠키로, 브라우저가 실행중일 때 사용할 수 있는 임시 쿠키

: 브라우저 종료시 쿠키는 삭제

 

- 영속성 쿠키(Persistent Cookie)

: 브라우저의 종료 여부와 상관없이 MaxAge 또는 Expires에 지정된 유효시간만큼 사용 가능한 쿠키

 

 

4. Secure

: 쿠키를 전송해야 할 때 사용하는 프로토콜에 따른 쿠키 전송 여부를 결정

: HTTPS 프로토콜을 이용하여 통신하는 경우에만 쿠키 전송이 가능하며, Secure 옵션이 없다면 프로토콜 상관없이 전송 가능

 

 

5. HttpOnly

: 자바스크립트에서 브라우저의 쿠키에 접근 여부를 결정

: 옵션이 true일 경우 자바 스크립트에서 쿠키에 접근이 불가하며, 기본 디폴트값은 false로 false인 경우 XSS 공격에 취약

 

 

6. SameSite

: Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션(GET, POST, PUT 등)의 조합으로 서버의 쿠키 전송 여부를 결정

 

- Lax : Cross-Origin 요청이면 GET 메소드에 대해서만 쿠키 전송 가능

- Strict : Cross-Origin이 아닌 same-site인 경우에만 쿠키 전송 가능

- None : 항상 쿠키를 보낼 수 있으며, Secure 옵션이 필요

 

* same-site는 요청을 보낸 Origin과 서버의 도메인/프로토콜/포트가 같은 경우를 말하며, 하나라도 다를 경우 Cross-Origin

 

 

 

- 옵션을 지정한 이후 서버에서 클라이언트로 쿠키를 처음 전송하게 된다면 헤더에 Set-Cookie라는 프로퍼티에 쿠키를 담아 전송.     이후 클라이언트 혹은 서버에서 쿠키를 전송해야 할 경우 클라이언트는 더에 Cookie라는 프로퍼티에 쿠키를 담아 서버에 쿠키를 전송