fix(security): 세션 쿠키 보안 플래그 + 운영 로그 레벨

- 세션 쿠키에 HttpOnly(XSS로 탈취 방어)·Secure(HTTPS 전용)·SameSite=Strict(CSRF 방어) 적용
- Secure는 COOKIE_SECURE 환경변수로 분리 (로컬 http 개발에서도 로그인되도록 기본 false)
- 운영 로그 레벨을 LOG_LEVEL 환경변수로 분리, 운영은 INFO
- 학습 포인트 주석: 세션 인증의 3대 쿠키 플래그가 왜 필요한가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
AWESOMEDEV 2026-07-17 07:19:21 +09:00
parent 5a82ecb291
commit 8486c7e656
2 changed files with 9 additions and 1 deletions

View File

@ -30,7 +30,13 @@ server:
servlet:
session:
timeout: 8h # 하루 근무 동안 로그인 유지
cookie:
# 학습 포인트: 세션 쿠키에 붙이는 3대 보안 플래그. 세션 방식 인증에선 필수다.
http-only: true # JS(document.cookie)로 못 읽는다 → XSS로 세션 탈취 방어
secure: ${COOKIE_SECURE:false} # HTTPS로만 쿠키 전송(운영은 true). 로컬(http)은 false여야 로그인됨
same-site: strict # 다른 사이트에서 온 요청엔 쿠키를 안 붙인다 → CSRF 방어의 핵심
logging:
level:
dev.awesomedev.mirim: DEBUG
# 학습 포인트: 개발은 DEBUG로 자세히, 운영은 INFO로. 로그도 자원이고, 과한 로그는 비용·노이즈다.
dev.awesomedev.mirim: ${LOG_LEVEL:DEBUG}

View File

@ -31,6 +31,8 @@ services:
DB_NAME: mirim
DB_USER: mirim
DB_PASSWORD: ${DB_PASSWORD}
COOKIE_SECURE: "true" # 운영은 HTTPS(Caddy)이므로 세션 쿠키를 HTTPS 전용으로
LOG_LEVEL: INFO # 운영 로그는 INFO
depends_on:
postgres:
condition: service_healthy