🩸 실전 XSS — 브라우저에서 진짜 실행 REAL EXECUTION · sandboxed iframe CWE-79 · KISA XSS

이건 mock이 아닙니다. 샌드박스 iframe 안에서 진짜 취약 앱이 돌아갑니다. 당신의 페이로드가 그 안에서 실제로 자바스크립트를 실행해 세션 토큰을 탈취합니다 — 그리고 이스케이프/새니타이즈로 똑같은 페이로드가 막히는 것까지 확인합니다.
취약 앱 로딩 중…

💬 대상 앱 — 댓글 게시판 (샌드박스)

메모리에 세션 토큰을 가진 진짜 페이지입니다. 당신의 댓글이 여기 렌더링됩니다 — 공격자가 코드를 실행시키는 대상.
유출 모니터 (페이로드가 밖으로 보낸 메시지):
—

⚠️ 취약한 렌더링 (innerHTML) VULNERABLE

앱이 댓글을 innerHTML로 삽입해, 마크업이 코드로 실행됩니다.
실행된 싱크:
out.innerHTML = comment
결과가 여기 표시됩니다.

✅ 안전한 렌더링 (textContent + 새니타이즈) SECURE

같은 앱·같은 페이로드지만, 출력을 이스케이프해서 마크업이 코드가 아닌 텍스트로 보입니다.
실행된 싱크:
out.textContent = comment
결과가 여기 표시됩니다.
왜 뚫리고, 어떻게 막나
innerHTML은 문자열을 HTML로 파싱하므로 <img onerror>·<svg onload>가 피해자 세션에서 공격자 JS를 실행합니다(쿠키·토큰 탈취, 사용자 대행 액션). 방어: 신뢰할 수 없는 데이터는 textContent로 렌더하고 출력 시 이스케이프하며, CSP로 주입된 인라인 스크립트 실행 자체를 차단합니다.
VULNERABLE
// JS — innerHTML (취약)
out.innerHTML = comment;   // 마크업이 코드로 실행
SECURE
// JS — textContent (안전)
out.textContent = comment; // 항상 문자열로만 표시
// + CSP: script-src 'self'
⚠️ 교육용 시뮬레이션입니다. 취약 앱은 당신 기기의 샌드박스 iframe에서만 동작하며, 페이로드는 이 페이지·다른 사이트·네트워크에 접근할 수 없습니다. 어떤 데이터도 브라우저를 벗어나지 않습니다.