04 · CHAPTER 03 · WEB SECURITY
화면에 들어온
낯선 대본
XSS가 브라우저의 실행 문맥을 악용하는 원리와 출력 인코딩을 살펴봅니다.
실습 범위 안내 이 장의 확인 과정은 본인이 소유하거나 명시적으로 허가받은 교육·실습 환경에서만 수행합니다. 운영 시스템과 제3자의 장비에는 적용하지 않습니다.
WEB SECURITY STUDY NOTE화면에 들어온 낯선 대본XSS · HTML · JavaScript · Encoding
01
게시글이 갑자기 대본이 된다면
핵심 용어
XSS HTML JavaScript Encoding
사용자가 쓴 글은 내용으로 보여야지 페이지를 움직이는 명령이 되어서는 안 됩니다.
XSS는 신뢰하지 않은 값이 HTML이나 JavaScript 문맥에 들어가 브라우저에서 실행될 때 발생합니다.
저장형은 서버에 보관되어 여러 사용자에게 영향을 주고, 반사형은 요청값이 응답에 바로 반영되며, DOM 기반은 브라우저 코드에서 만들어집니다.
02
출력 위치가 방어 방법을 정한다
핵심 개념
HTML Text Attribute URL JavaScript CSP
HTML 본문, 속성, URL, JavaScript는 서로 다른 인코딩이 필요합니다.
HTML TextHTML 엔터티 인코딩
Attribute따옴표와 속성 문맥 보호
URL허용 스킴과 URL 인코딩
JavaScript가능하면 데이터 직렬화 사용
CSP실행 가능한 출처 제한
03
템플릿 이스케이프 확인
관련 명령어
rg "esc\(" app/Views rg "raw|unescaped" app/Views curl -I http://127.0.0.1 | grep -i content-security-policy 프레임워크의 자동 이스케이프와 예외적으로 원문을 출력하는 지점을 검토합니다.
$ rg "esc\(" app/Views
$ rg "raw|unescaped" app/Views
$ curl -I http://127.0.0.1 | grep -i content-security-policy
04
쿠키 보호로 피해 범위 줄이기
보안 관점
위험 요소 확인 기준 대응 원칙
HttpOnly는 세션 쿠키 접근을 제한하지만 XSS 자체를 제거하지는 못합니다.
출력 인코딩, 안전한 DOM API, CSP, 입력 검증을 함께 적용하고 사용자 HTML이 필요하면 검증된 정화 도구를 사용합니다.
입력값을 저장할 때 한 번 바꾸는 것보다 실제 출력되는 문맥에서 안전하게 인코딩하자.
CHAPTER REVIEW
이번 장에서 기억할 한 문장
데이터가 출력되는 HTML 문맥에 맞게 인코딩해야 브라우저가 내용을 코드로 실행하지 않는다.