가짜 로그인 폼 (피싱)
iframe 안에 부모 사이트와 똑같이 생긴 로그인 폼을 보여주고 입력값을 외부로 빼낸다.
sandbox 정책별 동작
| 정책 | 예상 결과 |
|---|---|
| sandbox 미부착 | 동작함 |
sandbox="allow-scripts" | 동작함 |
sandbox="" (가장 엄격) | 부분 동작 |
임베드 스니펫
이 코드는 임베드 전용 페이지를 사용합니다. 본인 서비스에 그대로 붙여 넣고 렌더링/차단 여부를 확인하세요.
<iframe src="https://xss-playground.com/embed/phishing-form?lang=ko" title="XSS Playground - 가짜 로그인 폼 (피싱)" width="600" height="420" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>
실제 공격 시 이 iframe 은 부모 페이지 안에서 마치 서비스의 모달/로그인 영역처럼 보이도록 위치됩니다. 사용자는 도메인이 attacker.example 인 것을 알기 어렵습니다. (아래 풀스크린 오버레이 시나리오와 결합되면 더 위험.)
가짜 로그인 폼 (자기 origin 안에서 자유롭게 그려짐)
수집 로그
// 로그 없음
해설
- iframe 안의 폼은 자기 origin 의 페이지이므로 어떤 UI 도 자유롭게 그릴 수 있고, 입력값을 자기 서버로 보낼 수 있습니다. SOP 와 무관합니다.
sandbox="allow-scripts"만 줘도 form submit 자체 는 막을 수 있지만, JS 로 값을 수집해 fetch 로 보내는 건 여전히 가능 합니다.sandbox=""(빈 값) 이라야 JS 도 막힙니다.- 가장 확실한 대응은 iframe 의 host 를 allowlist 로 제한하는 것입니다. 유튜브/비메오 같은 신뢰 호스트만 통과시키면 이 시나리오 자체가 성립하지 않습니다.