본문 바로가기

[HTTP] Cookie - 쿠키

@xuv22025. 5. 29. 11:29

내가 만든 국희~

 

Cookie 없이 HTTP 통신시 발생하는 문제

Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고 HTTP 요청시 서버로 전달 

Set-Cookie 헤더를 통해 서버에서 클라이언트로 전달

위 사진처럼 웹에 접속 -> 로그인 과정을 진행한다고 가정하자.

 

클라이언트와 서버는 서로 상태를 유지하지 않는다 (Stateless)

HTTP는 무상태(stateless) 프로토콜이므로 3Way Hand Shake 를 통해 클라이언트와 서버가 요청과 응답을 한번 주고 받으면 연결을 해제한다. 즉, 클라이언트가 다시 서버에 HTTP 요청을 보내도 서버는 이게 이전 클라이언트인지 아닌지 기억하지 못한다. 

그렇다면 HTTP 요청을 보낼 때마다 GET 의 쿼리 파라미터로 사용자의 정보를 전송하는 방식은 어떨까?

위와 같은 대안은 다음과 같은 문제가 존재한다.

1. 브라우저를 완전히 종료하고 다시 열면 초기화 되는 문제

2. 모든 요청에 사용자 정보가 포함되도록 HTTP 메서드를 구현해야는 문제

3. SQL Injection 등의 심각한 보안 문제가 발생 가능하다


해결 방안 : Cookie 적용

위 문제를 해결하기 위해 최초 로그인시 받은 메시지 바디의 이름을 Set-Cookie 헤더를 통해 쿠키를 생성하여 클라이언트에 응답한다.

이때, 수신받은 클라이언트는 자신의 웹 브라우저 쿠키 저장소에 해당 쿠키를 저장한다.

 

이후 웹 브라우저는 서버에 요청 메시지를 보낼 때, 자동으로 무조건 쿠키 저장소를 뒤지고 이를 요청 메시지에 같이 실어 서버로 전송한다.

이때 서버는 해당 쿠키의 정보로 응답 메시지를 생성하여 클라이언트에게 전달한다.

중요 : 최초 쿠키 저장후, 모든 클라이언트 요청 메시지에 쿠키가 추가 되어 전송 된다


Cookie의 활용

사용처

- 사용자 로그인 세션 관리 -> 세션 ID를 통한 사용자 조회

- 광고 정보 트래킹

 

쿠키 정보는 항상 서버에 전송

- 이때 추가 네트워크 트래픽 유발

- 항상 최소한의 정보만 사용 해야한다

- 보안에 민감한 데이터는 쿠키 내부에 저장하면 안된다 (주민번호, 카드 비밀번호 등)


Cookie 내부 까보기

 

expiers (만기)

- 세션 아이디는 각 세션을 구분하는 ID

- expires : 쿠키 만료일 설정 -> 만료시 쿠키 삭제

- max-age= ms 단위로 쿠키가 생존할 초 단위 -> 0이나 음수 설정시 삭제

쿠키 종류

- 세션 쿠키 : 만료 날짜 생략시 브라우저 종료시까지만 쿠키 유지 -> 로그인시 껐다 키면 다시 로그인 해야하는 상황

- 영속 쿠키 : 만료 날짜 입력시 해당 날짜까지 생존하는 쿠키

 

domain(도메인)

도메인 명시 : 명시한 문서 기준 도메인 + 서브 도메인

도메인 생략 : 현재 문서 기준 도메인만 적용 ->  예를 들어 example.org에서 쿠키를 생성하고 도메인을 생략하면 example.org 에서만 쿠키 접근 가능

 

path (경로)

지정 URI 하위 경로 페이지만 쿠키 접근이 가능하도록 설정하지만, 일반적으로 한 도메인 안에서 쓰는 쿠키가 비스무리 하기 떄문에 path=/루트 경로로 지정한다

 

secure (보안)

Secure

- 쿠키는 https와 http를 구별 X

- Secure 포함시 https 인 경우에만 전송

 

HttpOnly

- XSS 공격 방지

- 자바 스크립트에서 접근 X

- HTTP 전송에만 사용

 

SameSite

- XSRF 공격 방지

- 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송


보안 관련 참고 자료

https://owasp.org/www-project-top-ten/

 

OWASP Top Ten | OWASP Foundation

The OWASP Top 10 is the reference standard for the most critical web application security risks. Adopting the OWASP Top 10 is perhaps the most effective first step towards changing your software development culture focused on producing secure code.

owasp.org

 

xuv2
@xuv2 :: xuvlog

폭싹 늙었수다

목차