가짜 로그인 폼 (피싱)
iframe 안에 부모 사이트처럼 보이는 로그인 폼을 그려 사용자의 입력값을 자기 origin 에서 수집한다.
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 로 제한하는 것입니다.