[Javascript] IFRAME이 최상위 창을 리디렉션하지 못하게하는 방법



Answers

HTML5에서는 iframe 샌드 박스 속성이 추가되었습니다. 이 글을 쓰는 시점에서 이것은 Chrome, Safari, Firefox 및 최신 버전의 IE와 Opera에서 작동 하지만 원하는 것은 거의 없습니다.

<iframe src="url" sandbox="allow-forms allow-scripts"></iframe>

최상위 리디렉션을 허용 하려면 sandbox="allow-top-navigation" .

Question

일부 웹 사이트에는 IFRAME 인클로저를 "벗어날"수있는 코드가 있습니다. 즉, 페이지 A 가 부모 페이지 P 내부에 IFRAME 로드 된 경우 A 일부 자바 스크립트는 외부 창을 A 리디렉션합니다.

일반적으로이 Javascript는 다음과 같습니다.

<script type="text/javascript">
  if (top.location.href != self.location.href)
     top.location.href = self.location.href;
</script>

제 질문은 : 부모 페이지 P 의 저자로서 내부 페이지 A 의 저자가 아니기 때문에 A 가이 탈주를하지 못하게하려면 어떻게해야합니까?

추신 : 그것은 그것이 교차 사이트 보안 위반이되어야하는 것 같아 보이지만 그렇지 않습니다.




w3.org 스펙을 읽은 후. sandbox 속성을 찾았습니다.

sandbox="" 설정하면 iframe의 리디렉션을 방지 할 수 있습니다. 그것은 iframe을 리디렉션하지 않을 것이라고 말하고 있습니다. 근본적으로 클릭을 잃을 것입니다.

예 : http://jsfiddle.net/ppkzS/1/
샌드 박스가없는 예 : http://jsfiddle.net/ppkzS/




내 경우에는 사용자가 내부 페이지를 방문하여 서버가 방문자로 자신의 IP를 볼 수 있도록합니다. 나는 내부 페이지가 내 서버 IP를 방문자로 보게 될 것이라고 생각하므로 PHP 프록시 기술을 사용한다. 내가 지금까지 가지고있는 유일한 해결책은 전적으로 적다. 귀하의 페이지에 올려주세요 :

<script type="text/javascript">
    window.onbeforeunload = function () {                       
         return "This will end your session";
    }
</script>

이것은 firefox와 ie에서 모두 작동합니다. evt.return (뭐든간에) 같은 쓰레기를 사용하는 버전을 발견 할 것입니다 ... 파이어 폭스에서는 작동하지 않습니다.







Links