개요
DOM based XSS는 서버가 정상 데이터를 반환하더라도, 브라우저 내 자바스크립트가 사용자 입력 값을 검증 없이 DOM에 반영하면서 발생하는 취약점이다. 이로 인해 페이지 구성 과정에서 악성 스크립트가 실행되어 클라이언트의 브라우에서 공격이 이루어진다.
취약점 발생 지점
웹 브라우저에서 자바스크립트가 사용자 입력 값을 검증 없이 동적으로 DOM을 구성할 때 발생한다.
공격 동작 순서

- 공격자가 악성 스크립트를 URL 파라미터, 해시 값 등 입력 값에 삽입하고, 피해자가 해당 URL에 접속하도록 유도한다.
- 브라우저 내 자바스크립트 코드가 사용자 입력 값을 가져와 DOM 조작에 사용한다.
- 검증되지 않은 입력 값이 그대로 DOM에 반영된다.
- 브라우저가 DOM을 기반으로 페이지를 렌더링하면서 악성 스크립트가 포함된다.
- 최종적으로 피해자의 브라우저에서 악성 스크립트가 실행된다.
💡DOM을 사용하는 이유는?
DOM을 활용하면 서버 전체 페이지를 다시 불러올 필요 없이 브라우저에서 필요한 부분만 즉시 수정이 가능하므로, 응답 속도가 빨라지고 서버 부하가 감소한다.