다른 사이트가 다음 사이트를 "프레임"하지 않기를 원한다고 가정 해 봅시다 <iframe>
.
<iframe src="http://example.org"></iframe>
따라서 모든 페이지에 프레임 방지, 프레임 버스 팅 JavaScript를 삽입합니다.
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
우수한! 이제 포함 된 iframe을 자동으로 "버스트"하거나 분리합니다. 작은 문제 하나만 빼고
그것이 나오는 것에 따라, 당신의 프레임 파열 코드가 파열 될 수있다 , 다음과 같이 :
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
이 코드는 다음을 수행합니다.
- 브라우저가
window.onbeforeunload
이벤트 핸들러 를 통해 현재 페이지에서 탐색하려고 할 때마다 카운터를 증가시킵니다. - 를 통해 밀리 초마다 실행되는 타이머를 설정
setInterval()
하고 카운터가 증가한 것을 발견하면 현재 위치를 공격자의 제어 서버로 변경합니다. - 해당 서버는 HTTP 상태 코드가 204 인 페이지를 제공 하며 브라우저는 어디에서나 탐색하지 않습니다.
내 질문은-실제 문제 보다 JavaScript 퍼즐에 가깝습니다. 프레임 버스터 버스터를 어떻게 물리 칠 수 있습니까?
몇 가지 생각이 있었지만 테스트에서 아무런 효과가 없었습니다.
onbeforeunload
를 통해 이벤트를 지우려고 시도해onbeforeunload = null
도 아무런 효과가 없었습니다.alert()
중지 된 프로세스를 추가하면 사용자에게 진행 중임을 알릴 수 있지만 코드를 방해하지는 않습니다. 확인을 클릭하면 버스 팅이 정상적으로 계속됩니다setInterval()
타이머 를 지우는 방법을 생각할 수 없습니다
나는 JavaScript 프로그래머가 아니므로 여기 당신에게 내 도전이 있습니다 : 버스터, 프레임 버스터 버스터를 터뜨릴 수 있습니까?
example.org
RFC 2606에 지정된 도메인을 사용하십시오. ietf.org/rfc/rfc2606.txt