1. 결함의 본질

입력이 코드로 해석되게 만드는 결함 이 한 가지 결함이 출력 위치 3개에서 발현

2. 공격 대상

사용자(피해자 브라우저) 공격자 코드를 피해자 브라우저에서 실행시켜 쿠키 탈취, 화면 조작, 세션 도용 등 진행

3. 전제 조건

  1. 사용자 입력이 페이지에 출력되는 지점의 존재
  2. 그 출력이 이스케이프 없이 HTML/JS로 해석

4. 공격 경로

출력이 일어나는 위치에 따라 세 가지로 갈린다.

종류출력 위치경로판별점
StoredDB → 응답입력(댓글·게시글) → DB 저장 → 열람 시 응답에 출력저장됐다 나중에 나오는가?
Reflected서버 응답(즉시)URL 파라미터에 박음 → 클릭 → 서버가 응답에 출력서버 응답에 박혀 나오는가?
DOM클라 JS → DOMURL(#)에 박음 → 클릭 → JS가 읽어 DOM에 꽂음서버 안 거치고 JS가 DOM에 넣는가?

5. 판별점

입력점 찾기 → 그 값이 어디에서 출력되는지 추적 → 이에 따른 종류 결정 저장되었다 나오면 stored, 서버가 즉시 반사하면 reflected, 클라이언트 JS가 DOM에 꽂으면 DOM

6. 방어

결함은 오직 하나: 입력이 코드로 출력 따라서 방어도 오직 하나: 출력 시 맥락에 맞게 이스케이프