1. Cookie란?
웹 브라우저에 저장되는 작은 데이터 조각으로, 사용자의 상태를 유지하거나 사용자 경험을 개선하기 위해 사용된다.
Cookie를 사용하는 이유
- HTTP는 Stateless(상태 유지 X), Connectionless(연결 유지 X) 특성을 가짐
- 클라이언트가 재요청 시 서버는 이전 요청을 기억하지 못함
- 로그인과 같은 상태를 유지해야 하는 경우 발생
- 매 요청마다 사용자 정보를 포함하여 해결 가능
- 브라우저를 종료하고 다시 열어도 사용자 정보를 유지해야 하는 경우 존재
💡 Tip: 단순한 데이터 저장이 필요할 경우 Web Storage(localStorage, sessionStorage)를 사용 가능하지만, 보안에 취약하므로 민감한 정보를 저장하면 안 됨.
2. 로그인 성공 시 쿠키 설정 과정
- 사용자가 로그인 정보를 입력하여 서버에 요청
- 서버는 ID/PW 확인 후 일치하면 Set-Cookie 헤더를 활용하여 쿠키 생성 및 저장
- 이후 모든 요청에서 브라우저가 자동으로 쿠키를 포함하여 서버로 전송
- 서버는 쿠키 값을 이용해 사용자를 인증/인가함
Cookie Header
- Set-Cookie: 서버에서 클라이언트로 쿠키 전달 (Response Header)
- Cookie: 클라이언트가 저장한 쿠키를 HTTP 요청 시 서버로 전달 (Request Header)
💡 Tip: 불필요한 데이터는 최소한으로 저장하여 네트워크 트래픽을 줄이고, 보안 리스크를 낮추는 것이 중요!
3. Cookie의 생명주기
1) 세션 쿠키 (Session Cookie)
- 브라우저가 종료될 때까지 유지
- expires 또는 max-age 설정 없음
2) 영속 쿠키 (Persistent Cookie)
- 특정 만료 날짜를 설정하여 유지 가능
- expires=Sat, 11-Dec-2024 00:00:00 GMT; → 해당 날짜 이후 삭제
- max-age=3600; → 3600초(1시간) 동안 유지
💡 Tip: 세션 유지가 필요한 경우 세션 쿠키를 사용하고, 자동 로그인을 원하면 영속 쿠키를 활용하면 된다.
4. Cookie 보안 설정
1) Secure
- HTTPS 환경에서만 쿠키를 전송하도록 제한
2) HttpOnly
- 자바스크립트에서 쿠키 접근을 차단하여 XSS(Cross-site Scripting) 공격 방어
3) SameSite
- CSRF(Cross-Site Request Forgery) 공격 방지
- SameSite=Strict: 동일 도메인에서만 쿠키 전송
- SameSite=Lax: 기본값, 일부 외부 요청에서도 쿠키 전송 가능
- SameSite=None; Secure: 크로스 도메인 요청 허용 + HTTPS 필요
💡 Tip: 보안이 중요한 쿠키에는 Secure, HttpOnly, SameSite 속성을 반드시 적용해야 한다.
5. Cookie의 문제점 및 보안 대책
문제점
- 쿠키 값 임의 변경 가능 → 다른 유저로 인식될 위험 존재
- 쿠키 데이터 탈취 가능 → HTTPS 사용이 필수
보안 대처 방법
- 민감한 정보(주민번호, 비밀번호 등)를 쿠키에 저장하지 않음
- 쿠키에는 암호화된 Token 저장 → 서버에서 매핑하여 검증
- 탈취 가능성을 줄이기 위해 토큰 만료시간을 짧게 설정
- 로그인 세션을 강제로 만료시키는 기능 제공 (기기, IP 변경 시 자동 만료 등)
💡 Tip: 쿠키 기반 인증보다 보안성이 높은 JWT, OAuth 등의 토큰 인증 방식을 고려하는 것이 좋다.
✨ 오늘의 핵심 정리
✔️ 쿠키는 HTTP의 Stateless 특성을 보완하여 상태 유지 기능을 제공함 ✔️ Secure, HttpOnly, SameSite 등의 속성을 활용하여 보안성을 강화해야 함 ✔️ 민감한 정보를 직접 저장하는 것은 보안상 위험하므로 반드시 암호화된 토큰을 활용할 것
💡 면접 질문
- 쿠키와 세션의 차이점은 무엇인가요?
- 쿠키를 활용한 인증 방식의 보안 취약점은 무엇이며, 이를 해결하는 방법은?
- SameSite 속성의 역할과 설정 값에 따른 차이점은?
- 브라우저에서 쿠키를 확인하고 수정할 수 있는 방법은 무엇인가요?
- HttpOnly와 Secure 속성을 설정하는 이유는 무엇인가요?