Security Engineer · XSS

문맥별 출력 인코딩 기준표

같은 입력값이라도 HTML 본문, 속성, JavaScript, URL 문맥에서 위험 문자가 달라지므로 출력 위치 기준으로 대응을 나눈다.

01

저장 위치 확인

댓글, 프로필, 검색어처럼 입력값이 어디에 저장되거나 반사되는지 본다.

input
02

출력 문맥 식별

본문, 속성, URL, 스크립트 중 어느 위치에 들어가는지 구분한다.

context
03

문맥별 인코딩

출력 지점에서 해당 문맥에 맞는 escaping을 적용한다.

encode
04

실행 차단

CSP, HttpOnly, sanitizing으로 피해와 우회 가능성을 줄인다.

defense in depth
HTML body
<, >, & 인코딩 태그가 새로 만들어지지 않게 엔티티로 출력한다.
기본
Attribute
따옴표와 이벤트 속성 차단 속성 경계가 깨지면 onerror 같은 이벤트가 삽입될 수 있다.
속성 문맥
Script
코드 안 직접 삽입 금지 JSON 직렬화와 nonce 기반 CSP로 스크립트 실행 경로를 제한한다.
고위험

문맥별 출력 인코딩 실수 방지

입력 검증 한계 저장 전 필터만 믿지 말고 출력 지점에서 인코딩한다.
DOM sink innerHTML, document.write, location 조작을 점검한다.
쿠키 보호 HttpOnly는 탈취 피해를 줄이지만 XSS 자체를 없애지는 않는다.