방어 계층 비교표
세 공격은 서로 다른 경계의 실패다
운영 설정에서는 증상, Nest 적용 지점, 성공 기준을 분리해 보아야 대응 범위가 선명해진다.
CORS
출처 허용 경계
실패 신호
*와 credentials를 함께 쓰거나 운영 도메인을 너무 넓게 연다.Nest 지점
app.enableCors()에서 origin, methods, headers를 제한한다.성공 기준허용 출처 목록과 쿠키 전송 조건이 환경별로 분리된다.
CSRF
사용자 의도 경계
실패 신호쿠키 인증을 쓰면서 쓰기 요청에 별도 토큰 검증이 없다.
Nest 지점CSRF 토큰, SameSite 쿠키, 쓰기 요청 헤더 검증을 조합한다.
성공 기준상태 변경 요청은 사용자가 받은 토큰 없이는 실패한다.
XSS
렌더링 실행 경계
실패 신호저장된 입력을 검증 없이 HTML로 다시 출력하거나 CSP가 없다.
Nest 지점DTO 검증, sanitize, 템플릿 이스케이프, helmet CSP를 함께 적용한다.
성공 기준입력은 정제되고 출력은 텍스트로 이스케이프된다.
점검 순서: 출처 정책을 좁히고, 쿠키 기반 쓰기 요청을 보호한 뒤, 화면으로 나가는 입력을 인코딩한다.