[04-01] Cookie
1. Cookie
1.1 Cookie
: 사용자의 상태를 기억하는 목적(-> 세션과 같이 사용 X시, Stateless)
: 사용자가 웹 사이트 방문 시, WS가 WB에게 저장하는 작은 데이터(텍스트 형식 저장):
: WB는 이후 같은 웹 사이트 방문 시, 자동으로 쿠키를 WS에 전송
=> WS에서 제어 + WB에 저장 및 전송
1.2 Cookie의 사용
- 쿠키 설정
- WS 헤더: set-cookie로 제어
- WB 헤더: cookie로 전송 - 사용 기준
: Domain + Path === WB가 쿠키를 WS에 전송하는 기준
- 사용 Path의 경우, / 이후로범위 특정 -> 단 / 하나만 정의 시 와일드 카드의 의미(*)
- 사용 Domain 유의점
- subDomain 정의 X | 호스트의 하위 도메인들은 모두 해당 쿠키 사용 가능 Ex) .google.com |
---|---|
- subDomain 정의 O | 정의된 하위 도메인만 해당 쿠키 사용 가능 Ex) mail.google.com |
- 쿠키 유효 시간
: MaxAge/Expores로 명시- 명시 O => Persistent Cookie(지속쿠키)
: 유효 기간이 정해져있으므로 세션과는 상관없이 해당 유효기간까지 저장됨 - 명시 X => Session Cookie (세션 쿠키)
: 유효 기간이 정해지지 않고 세션에 종속됨 => 세션 종료 시, 삭제
- 명시 O => Persistent Cookie(지속쿠키)
1.3 쿠키 보안
: WB에서 JS를 통해 Cookie 탈취 가능 -> 보안에 유의
- HTTPOnly: 클라이언트 측에서 HTTP 통신 외에는 Cookie에 접근 불가
-> XSS(=> js injection이라 생각하면 편함) 공격에 의한 쿠키 접근 제어 - Secure: HTTPS 채널을 사용하여 통신
-> MITM 방지 - SameSite: WB의 주소에 표시된 도메인과 동일한 도메인에 대한 요청 시, 쿠키 전송
-> CSRF 방지
-> CSRF 공격 시, 크로스 사이트에 비의도적인 요청을 통해 과거에 설정된 (서드파티) 쿠키들이 전송
속성 | 퍼스트 파티 쿠키(Frist-party Cookie) | 서드 파티 쿠키(Third-party Cookie) |
도메인 | Cookie Domain = Site Domain | Cookie Domain ≠ Site Domain |
사용 목적 | 사용자 경험 개선 -> 상태 저장, 개인 정보 인식용 |
유저 행동을 기록, 추적 -> 광고, 사용자 추적, 웹 분석 등.. |
허용 여부 | 대부분의 WB에서 기본 허용 | 많은 WB에서 기본적 차단 |
- HTTPS를 사용해도 서드 파티 쿠키가 인증정보를 담고 있다면 "어드민 API" 호출 가능
- HTTPS 미사용 시에는 MITM으로 외부에서 서드 파티 쿠키를 볼 수 있음
- 크로스 사이트 요청 시, 크로스 사이트에 해당하는 쿠키라도 전송에 대해 고민 해야함
* 보안 레벨 분류
1) 보안 레벨 높음: Strict - 퍼스트 파티 쿠키 전송만 허용
2) 보안 레벨 중간: Lax - 서드 파티 쿠키라도 특수 케이스시엔 부분 적용(최신 크롬 Default)
3) 보안 레벨 낮음: None - 서드 파티 쿠키 모두 허용(과거 크롬 Default)
1.4 쿠키 단점
- WB에 저장된 쿠키
-> 민감한 정보가 안전하지 않은 상태로 저장됨
-> WB간 공유 불가 - Domain + Path가 일치하는 WB에 대해 쿠키를 모두 담아 보냄
-> 쿠키에 다양한 정보를 담아 사용 시, 요청의 크키가 커짐(=> 불필요한 network Overhead발생)
깨알 사전
* keep-alive: 일반 헤더의 일종으로 송신자가 연결에 대한 타임아웃과 요청 최대 개수를 어떻게 정했는지 알려줌
=> 출처
* MITM(Man in the Middle): 중간자 공격, 요청-응답 사이에서 패킷을 탈취
* CSRF(Cross-Site-Request Forgery): 사이트 간 위조 요청-> 비의도적인 스크립트 실행에 의한 크로스 사이트 요