방어 계층 비교표

세 공격은 같은 보안 문제가 아니라 다른 경계의 실패다

CORS는 출처 허용, CSRF는 상태 변경 의도, XSS는 출력 실행 여부를 다룹니다. Nest 설정도 각각 다른 위치에서 점검해야 합니다.

CORS

출처 경계

실패 신호

*와 credentials를 함께 쓰거나 운영 도메인을 넓게 엽니다.

Nest 적용 지점

app.enableCors()에서 origin, methods, headers를 제한합니다.

CORS 허용 출처 분리

허용 출처 목록과 쿠키 전송 조건이 배포 환경별로 분리됩니다.

CSRF

의도 경계

실패 신호

쿠키 인증을 쓰면서 쓰기 요청에 별도 토큰 검증이 없습니다.

Nest 적용 지점

csurf, SameSite 쿠키, 쓰기 요청 헤더 검증을 조합합니다.

CSRF 토큰 쓰기 요청 차단

POST, PATCH, DELETE는 사용자가 받은 토큰 없이는 실패합니다.

XSS

렌더 경계

실패 신호

저장된 사용자 입력을 HTML로 다시 출력하거나 CSP가 없습니다.

Nest 적용 지점

DTO 검증, sanitize-html, helmet CSP를 함께 적용합니다.

XSS 입력 정제·출력 이스케이프

입력은 저장 전 정제되고 출력은 텍스트로 이스케이프됩니다.

점검 순서

먼저 브라우저 요청 경계를 좁히고, 쿠키 기반 쓰기 요청을 검증한 뒤, 저장된 입력이 응답에서 실행되지 않는지 확인합니다.