쿠키 옵션: HttpOnly, Secure, SameSite
1. HttpOnly
- 설명:
- HttpOnly 옵션이 설정된 쿠키는 JavaScript로 접근할 수 없도록 설정
- 브라우저는 이 쿠키를 서버로의 HTTP 요청에만 사용하며, 클라이언트 측 스크립트에서는 쿠키를 읽거나 수정할 수 없음
- 주요 목적:
- XSS(Cross-Site Scripting) 공격 방지:
- XSS는 악성 스크립트를 통해 클라이언트의 쿠키를 탈취할 수 있는 취약점임
- HttpOnly 쿠키는 JavaScript에서 접근할 수 없기 때문에 탈취 방지에 효과적
- XSS(Cross-Site Scripting) 공격 방지:
- 설정 예시 (HTTP 응답 헤더):
- Set-Cookie: sessionId=abc123; HttpOnly
2. Secure
- 설명:
- Secure 옵션이 설정된 쿠키는 HTTPS 프로토콜을 사용하는 경우에만 전송
- HTTP 요청에서는 쿠키가 전송되지 않기 때문에 네트워크에서의 스니핑(가로채기) 공격을 방지할 수 있음
- 주요 목적:
- Man-In-The-Middle (MITM) 공격 방지:
- HTTPS로만 전송되므로 암호화된 연결에서만 쿠키가 노출
- 쿠키를 보호하여 민감한 데이터가 노출되는 것을 방지.
- Man-In-The-Middle (MITM) 공격 방지:
- 주의사항:
- 반드시 HTTPS를 사용하는 환경에서 설정해야 함. 그렇지 않으면 쿠키가 전송되지 않아 인증 문제가 발생할 수 있음
- 설정 예시:
- Set-Cookie: sessionId=abc123; Secure
3. SameSite
- 설명:
- SameSite 옵션은 쿠키가 외부 사이트에서 전송될지 여부를 결정
- 크로스 사이트 요청(CSRF) 공격 방지를 위해 사용
- 값은 다음 세 가지 중 하나를 가짐
- Strict:
- 쿠키는 같은 사이트의 요청에서만 전송
- 사용자가 다른 도메인에서 링크를 클릭하여 이동하는 경우에도 쿠키는 전송되지 않음
- 보안성이 가장 높지만 UX가 제한될 수 있음
- Lax:
- 쿠키는 같은 사이트 요청뿐 아니라 일부 크로스 사이트 요청(예: GET 방식의 링크 클릭, 이미지 로드 등)에도 전송
- 보안과 UX 사이의 균형을 맞춘 옵션
- None:
- 모든 요청(같은 사이트, 다른 사이트)에서 쿠키가 전송
- 이 경우 Secure 옵션과 함께 사용해야만 쿠키가 설정(최신 브라우저 정책).
- Strict:
- 주요 목적:
- CSRF (Cross-Site Request Forgery) 방지:
- 공격자가 사용자의 세션 쿠키를 이용해 악의적인 요청을 수행하는 것을 방지.
- CSRF (Cross-Site Request Forgery) 방지:
- 설정 예시:
- Set-Cookie: sessionId=abc123; SameSite=Strict
쿠키 옵션 비교
옵션 주요 역할 방지 가능한 공격 단점/주의사항
HttpOnly | JavaScript 접근 금지 | XSS 공격 | JavaScript로 쿠키 접근 필요 시 사용 불가 |
Secure | HTTPS에서만 쿠키 전송 | MITM 공격, 스니핑 공격 | HTTP 환경에서는 쿠키 전송 불가 |
SameSite | 크로스 사이트 요청 제한 | CSRF 공격 | Strict 사용 시 일부 요청 차단 가능 |
쿠키 설정 종합 예시
Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
권장 사항
- HttpOnly: 민감한 정보(예: 세션 ID, 인증 토큰)를 저장하는 모든 쿠키에 반드시 사용.
- Secure: HTTPS 환경에서 모든 쿠키에 적용.
- SameSite: CSRF 공격 위험이 있는 경우 Strict 또는 Lax를 설정.
- 쿠키의 만료 시간(Expires or Max-Age)을 명시적으로 설정하여 의도치 않은 세션 지속을 방지.
'기타' 카테고리의 다른 글
단상 2 (0) | 2025.01.07 |
---|---|
파이썬 import kafka (six) ModuleNotFoundError 에러 (0) | 2025.01.06 |
Materialized Path - 계층적 데이터 표현... (0) | 2024.12.10 |
tar와 zip의 차이 (2) | 2024.12.06 |
시놀로지 web station - docker 연동 (0) | 2024.12.02 |