HTTP 보안 헤더 총정리

CSP, HSTS, X-Frame-Options 등 주요 HTTP 보안 헤더의 역할과 올바른 설정 방법을 설명합니다. Nginx, Apache, 백엔드 프레임워크에서 적용하는 방법과 실전 팁을 다룹니다.

· 2 min read · PALDYN Team

지난 글에서 제로 트러스트의 원칙을 살펴봤다. 이번에는 웹 서버 설정 몇 줄만으로 브라우저 수준의 방어를 추가할 수 있는 HTTP 보안 헤더를 살펴본다. 비용 대비 효과가 매우 높은 기법이다.

HTTP 보안 헤더란

HTTP 보안 헤더는 서버가 브라우저에게 보안 관련 동작을 지시하는 메타데이터다. 브라우저가 이 헤더를 해석하고 실행하기 때문에, 애플리케이션 코드를 수정하지 않아도 서버 설정만으로 여러 가지 공격을 막을 수 있다.

주요 HTTP 보안 헤더

필수 보안 헤더

Content-Security-Policy (CSP)

XSS 방어에 가장 효과적인 헤더다.

Content-Security-Policy: default-src 'self';
  script-src 'self' 'nonce-{random}';
  style-src 'self';
  img-src 'self' data: https:;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self';

Strict-Transport-Security (HSTS)

브라우저가 항상 HTTPS로만 접속하도록 강제한다.

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

주의: HSTS는 한 번 설정하면 max-age 동안 HTTP로 접속이 안 된다. HTTPS 인증서 설정이 완벽할 때만 사용하라.

권장 보안 헤더

X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()

보안 헤더 설정 예시

설정 방법

Nginx

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Python FastAPI 미들웨어

from fastapi import FastAPI, Request, Response
from fastapi.middleware.base import BaseHTTPMiddleware

class SecurityHeadersMiddleware(BaseHTTPMiddleware):
    async def dispatch(self, request: Request, call_next):
        response: Response = await call_next(request)
        response.headers["X-Content-Type-Options"] = "nosniff"
        response.headers["X-Frame-Options"] = "SAMEORIGIN"
        response.headers["Referrer-Policy"] = (
            "strict-origin-when-cross-origin"
        )
        response.headers["Strict-Transport-Security"] = (
            "max-age=31536000; includeSubDomains"
        )
        return response

app = FastAPI()
app.add_middleware(SecurityHeadersMiddleware)

무료 온라인 도구 securityheaders.com에서 사이트 URL을 입력하면 헤더 등급(A+~F)을 확인할 수 있다.


지난 글: 제로 트러스트(Zero Trust): ‘아무도 믿지 마라’

다음 글: 강력한 비밀번호 정책 설계하기


읽어주셔서 감사합니다. 😊