Cookie 보안 설정 및 사용 방법

반응형

1. Cookie 란 ? 

클라이언트의 상태 및 정보들을 저장할 수 있는 공간.

 

HTTP 프로토콜 통신은  기본적으로 stateless하게 이루어진다.

요청을 보낸 클라이언트의 정보나 상태 등을 저장하지 않는다.

하지만 예외적으로 값들을 저장하고, 사용해야 하는 경우를 위해 SessionCookie가 존재한다.

Session은 정보를 서버에 Cookie는 사용자 리소스(클라이언트 컴퓨터)에 저장한다.

 

2. 문제점

정보를 저장하고 사용하기 때문에 해킹 공격에 취약하다.

 

개인 컴퓨터의 보안상태나 활동반경이 다 다르기 때문에 저장되어 사용되는 값들은 해킹의 위험이 존재한다.

 

3. 대표적인 해킹 공격 2가지(xss, sniffing)

3-1 xss (Cross Site Script)

xss는 자바스크립트가 사용자의 컴퓨터에서 동작한다라는 점을 노린 공격이다.

'document.cookie' 같은 스크립트를 사이트에 심어서 사용자가 동작하게 되면

스크립트가 실행되면서 사용자의 쿠키 정보를 탈취할 수 있는 스크립팅 공격이다.

 

3-2 스니핑 (sniffing)

스니핑은 서버와 클라이언트 사이에서 네트워크를 통해 주고 받는 정보를 중간에 가로채서 패킷을 분석하여

주고 받는 정보들을 탈취하는 해킹 공격이다.

 

4. 해결방안

쿠키를 발행시 보안 설정과 주고 받는 조건등을 제한 하는 걸로 해결이 가능하다.

 

쿠키를 발행시 쿠키의 브라우저에서의 스크립트를 제한한다. 그리고 주고 받는 정보들을 암호화 하고,

쿠키 발행의 기준을 엄격히 할 수 있다.

HttpOnly

HttpOnly 설정을 true로 하게 되면 스크립트 사용을 제한함으로써 XSS 공격에 대비할 수 있다.

 

Secure

Secure 설정을 true로 하게 되면 주고 받는 데이터들을 암호화 할 수 있기에 스니핑 공격에 대비할 수 있다. 

https 설정이 되어있는 도메인에게만 발급을 허락한다.

 

SameSite

쿠키 발행의 기준이며 'none', 'lax', 'strict' 3가지 옵션이 존재한다.

 

'none'

다른 도메인에서의 요청에서도 쿠키의 발행을 허가한다. 하지만 Secure옵션이 true로 되어 있거나

프론트 도메인, 백 도메인 모두 https로  동작하여서 암호화 처리가 되어야지만 쿠키 사용이 가능하다.

 

'lax' 

안전한 HTTP 방법을 사용하는 사이트 간의 최상위 탐색(top-level-navigation)에서만 발행을 허가한다.

안전한 HTTP 란 'GET' method 를 얘기하는 것이며, 최상위 탐색이란 사용자가 주소창에

직접 입력한 값이다. 결과적으로 '사용자가 직접 입력한 GET 요청에 대해서만 발행을 허가한다'

 

'strict'

쿠키 발행에 CORS(Cross origin resource sharing)를 적용한다.

서버와 다른 도메인에서의 요청에는 발행을 하지 않는다.

 

5. 사용방법(생성, 사용, 삭제)

생성

Secure, HttpOnly, SameSite 적용 후 발행

쿠키를 생성시 HttpOnly와 Secure 설정을 적용하고, Response 헤더 값에 SameSite 설정을 담아 응답한다.

 

사용

헤더에 있는 쿠키 키 값을 반복문을 통해 조회하고, 원하는 키 값을 찾는다.

스프링 어노테이션을 사용해 조회도 가능하다.

 

삭제

삭제하고 싶은 Cookie의 만료시간을 0으로 설정하고 재발행한다.

 

6. 추가정보

1. 쿠키는 키와 값으로 이루어져 있으며, 값에는 띄어쓰기를 허용하지 않는다.

2. SameSite를 'Strict'로 설정하고 쿠키의 발행에 CORS 설정을 할 경우 locahost는  127.0.0.1를 다른 도메인으로 인식한다.

3. postman으로 cookie를 테스트할 때 http 를 붙이지 않으면 발행하지 않는다. (localhost:???? != http://localhost:????)

 

반응형

'개발 > 개발지식' 카테고리의 다른 글

Maven & Gradle  (0) 2023.07.06
DNS(Domain Name System)  (0) 2023.04.17
HTTP 특징 및 문제점 그리고 HTTP 2.0 특징 및 개선점  (0) 2023.04.01