2025. 3. 6. 00:27ㆍ개발/💻 CS 지식
HTTP의 특성
HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다
HTTP의 가장 큰 특징은 비연결성으로 요청에 대한 응답이 완료되면 서버와 클라이언트 간 연결이 완전히 끊어지며
서버는 클라이언트에 대한 정보를 완전 잃게 된다
이러한 특징 때문에 서버 단에서는 클라이언트를 알아볼 수 없게 되는데
여기서 문제가 발생하게 된다
매 요청마다 클라이언트에 대한 정보를 받아야 하게 되는 것이다
예를 들어, 네이버 메일을 보낼 때 메일 접속 > 메일 작성 > 메일 전송 의 모든 단계에서 로그인을 새로 해야 할 수도 있는 것이다
이러한 문제를 해결하기 위해 쿠키 라는 개념이 등장하게 된다
서버가 클라이언트를 알아볼 수 있도록 요청을 보낼 때마다 클라이언트에 대한 정보가 담긴 데이터 조각을 함께 보내는 것인데
이때 이 데이터 조각이 바로 쿠키다
쿠키
: 웹 서버에 의해 사용자의 컴퓨터(브라우저)에 저장되는 이름을 가진 작은 크기의 데이터이다
- 클라이언트는 이후 요청 시 쿠키를 함께 전송하여 상태 유지 가능(Stateful)
- 주요 사용 사례 : 세션 관리, 사용자 인증, 개인화된 설정 저장
쿠키의 주요 속성
쿠키는 Key-Value 형식이며, 4KB 이하의 데이터만 저장 가능하다
쿠키는 HTTP의 Set-Cookie 헤더를 통해 설정하며 아래와 같은 속성들을 갖는다
쿠키의 주요 속성 소개
name=value | 쿠키의 이름과 값 |
Expires | 만료 날짜 지정 (UTC 형식) |
Max-Age | 쿠키의 유효 기간(초 단위) (Expires보다 우선 적용) |
Domain | 쿠키가 적용될 도메인 지정 (하위 도메인 포함 가능) |
Path | 쿠키가 전송될 경로 지정 |
Secure | HTTPS에서만 전송 |
HttpOnly | JavaScript에서 접근 불가 (XSS 공격 방지) |
SameSite | CSRF 방지를 위한 옵션 (Strict, Lax, None) |
SameSite 설명
Strict | 같은 사이트에서만 쿠키 전송. 외부 사이트에서 접근 불가. | 강력한 방어 |
Lax | 동일 사이트 내에서는 항상 전송, 외부 사이트에서 GET 요청일 경우만 전송. | 기본 보안 |
None | 모든 요청에서 전송되지만, Secure와 함께 사용해야 함. | 없음 (주의 필요) |
Spring에서 Cookie 생성
ResponseCookie cookie = ResponseCookie.from("sessionId", "abc123")
.httpOnly(true)
.secure(true)
.path("/")
.sameSite("Strict")
.maxAge(Duration.ofDays(1))
.build();
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
쿠키의 생성 위치 - First Party 쿠키, Third Party 쿠키
퍼스트 파티 쿠키
- 사용자가 방문한 웹사이트에서 직접 생성한 쿠키
- 예: 사용자가 example.com을 방문하면, example.com에서 설정한 쿠키가 퍼스트 파티 쿠키
서드 파티 쿠키
- 사용자가 방문한 사이트와 다른 도메인에서 생성한 쿠키.
- 광고, 트래킹, 분석 도구 등에 사용됨.
- 예: example.com을 방문했을 때, ads.tracker.com에서 설정한 쿠키.
퍼스트 파티 쿠키 | 서드 파티 쿠키 | |
생성 주체 | 현재 방문한 사이트 (example.com) | 외부 사이트 (ads.com, tracker.com) |
용도 | 로그인 유지, 장바구니 저장, 개인 설정 | 광고 추적, 사용자 행동 분석, 리타겟팅 |
보안 위험 | 상대적으로 낮음 | 개인정보 침해 가능성 높음 |
브라우저 지원 | 기본적으로 허용됨 | 대부분의 최신 브라우저에서 차단 |
쿠키의 보안 이슈
1) XSS (Cross-Site Scripting)
공격자가 악성 JavaScript를 삽입하여 쿠키를 탈취
대응: HttpOnly 속성을 설정하여 JavaScript 접근 차단
2) CSRF (Cross-Site Request Forgery)
사용자가 원치 않는 요청을 강제로 실행하도록 유도하는 공격
대응: SameSite 속성을 Lax 또는 Strict으로 설정
3) 세션 하이재킹
네트워크에서 쿠키를 가로채 세션을 탈취하는 공격
대응: Secure 속성을 설정하여 HTTPS에서만 전송.
4) 쿠키 스푸핑
동일한 이름의 쿠키를 설정하여 기존 세션을 덮어씌우는 공격
대응: Domain 및 Path 속성을 올바르게 설정.
위와 같은 보안 이슈로 인해 서드 파티 쿠키는 점차 제한되는 추세이다
'개발 > 💻 CS 지식' 카테고리의 다른 글
[ 운영체제 ] 컴퓨터 시스템 구조 & 프로그램의 실행 (0) | 2025.03.22 |
---|---|
[ 운영체제 ] 운영 체제 개요 (0) | 2025.03.10 |
🖥 운영 체제 - 동기화 (0) | 2024.08.06 |
🖥 운영체제 - 메모리 페이징 (0) | 2024.08.06 |
🐬 MySQL 기본 문법 (1) | 2024.07.30 |