JavaScript 문자열 컨텍스트 탈출
사용자 입력이 script 블록 안의 문자열, JSON 초기 상태, inline 이벤트 코드에 들어갈 때 따옴표와 script 종료 토큰으로 컨텍스트를 탈출하는지 확인한다.
HTML payload 테스트
이 시나리오는 iframe sandbox 가 아니라 사용자 입력이 HTML/DOM 으로 렌더링되는 지점을 검증합니다.
- 사용자 입력을 script 블록에 직접 넣지 않는지 확인
- JSON.stringify / 안전한 JSON 직렬화가 </script> 같은 종료 토큰까지 처리하는지 확인
- HTML 인코딩만으로 JavaScript 문자열 컨텍스트를 보호하려 하지 않는지 확인
페이로드
복사할 payload
값이 JavaScript 문자열 리터럴 안에 삽입되는 경우를 검증한다.
미리보기
미리보기는 학습용으로 의도적으로 unsafe 렌더링을 수행합니다. 실제 서비스에서는 이 payload 가 텍스트로 이스케이프되거나 제거되어야 합니다.
로그
// 로그 없음
해설
- XSS 방어는 HTML 컨텍스트만 보면 부족합니다. 사용자 값이
<script>window.__DATA__ = "..."</script>같은 위치에 들어가면 JavaScript 문자열 규칙으로 인코딩되어야 합니다. </script>는 JavaScript 문자열 안에 있어도 HTML parser 입장에서는 script 종료 토큰이 될 수 있습니다. 초기 상태 주입에는 안전한 JSON 직렬화와 종료 토큰 이스케이프가 필요합니다.- 가장 좋은 구조는 사용자 입력을 script 블록에 직접 넣지 않고, 서버에서 JSON 응답으로 내려받거나 DOM 의 text/attribute API 로 분리해 렌더링하는 것입니다.