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