history.pushState 오염
history 를 마구 쌓아 부모 뒤로가기 동작을 망가뜨림.
sandbox 정책별 동작
| 정책 | 예상 결과 |
|---|---|
| sandbox 미부착 | 동작함 |
sandbox="allow-scripts" | 동작함 |
sandbox="" (가장 엄격) | 차단됨 |
임베드 스니펫
이 코드는 임베드 전용 페이지를 사용합니다. 본인 서비스에 그대로 붙여 넣고 렌더링/차단 여부를 확인하세요.
<iframe src="https://xss-playground.com/embed/history-pollution?lang=ko" title="XSS Playground - history.pushState 오염" width="600" height="420" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>
실행
// 로그 없음
해설
- iframe 의 pushState 는 자기 origin URL 만 변경하지만, 부모 탭의 뒤로가기 동작에 누적됩니다. 사용자가 서비스의 이전 화면으로 돌아가려고 뒤로가기를 눌러도 iframe history 만 돌아가게 될 수 있습니다.
- 공격 가치는 annoyance / 사용자가 사이트를 떠나지 못하게 가두는 용도입니다.
- sandbox 빈 값(
sandbox="") 이면 JS 가 막혀 이 공격도 차단됩니다.allow-scripts만 줘도 history API 자체는 자유롭게 호출됩니다.