CORS와 보안 관련 HTTP 헤더

프론트엔드와 API 서버 분리 환경에서 필수적인 CORS 설정과 웹 보안을 위한 주요 HTTP 헤더 설정 방법

CORS (Cross-Origin Resource Sharing)

동일 출처 정책 (Same-Origin Policy)

  • 웹 브라우저의 보안 정책으로 특정 출처에서 다른 출처의 리소스 접근을 제한

  • 출처는 Protocol, Host, Port의 조합으로 결정

CORS 동작 방식

  • 단순 요청: GET, HEAD, POST 메서드와 기본 헤더만 사용하는 요청

  • 예비 요청: 단순 요청 조건을 벗어나는 경우 OPTIONS 메서드로 먼저 확인

  • 인증 정보 포함 요청: 쿠키, 인증 헤더 등을 포함하며 양쪽 모두 특별한 설정 필요

Django CORS 설정

# django-cors-headers 설치 후 settings.py 설정
INSTALLED_APPS = ['corsheaders']
MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware']

# 허용할 출처 명시 (운영환경에서는 실제 도메인만)
CORS_ALLOWED_ORIGINS = [
    "https://example.com",
    "http://localhost:3000",
]

CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]
CORS_ALLOW_HEADERS = ["Authorization", "Content-Type", "X-CSRF-Token"]

보안 HTTP 헤더

HSTS (Strict-Transport-Security)

  • HTTP 연결을 강제로 HTTPS로 전환하여 중간자 공격 방지

SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True

CSP (Content-Security-Policy)

  • 신뢰할 수 있는 콘텐츠 소스를 지정하여 XSS 공격 방어

  • django-csp 라이브러리 사용 권장

X-Content-Type-Options

  • 브라우저의 MIME 타입 스니핑 공격 방지

SECURE_CONTENT_TYPE_NOSNIFF = True

X-Frame-Options

  • 다른 사이트의 iframe 내부 렌더링을 막아 Clickjacking 공격 방지

X_FRAME_OPTIONS = 'DENY'

Referrer-Policy

  • 다른 출처로 이동 시 전송되는 Referer 헤더 정보 제어

SECURE_REFERRER_POLICY = 'strict-origin-when-cross-origin'

Last updated