페이지를로드하는 동안 내 페이지가 다른 사이트에 프레임으로 포함되었는지 어떻게 알 수 있습니까? 리퍼러 요청 헤더가 여기에서 나를 도울 수 없다고 생각합니까? 감사.
답변
서버 측에서는 확인할 수 없지만 페이지가로드 된 후 자바 스크립트를 사용하여 감지 할 수 있습니다. 비교 top
및 self
, 동일하지 않은 경우 프레임에 있습니다.
또한 일부 최신 브라우저 X-FRAME-OPTIONS
는 두 가지 값을 가질 수있는 헤더를 존중 합니다.
- DENY – 페이지가 프레임에 포함되어있는 경우 렌더링되지 않도록합니다.
- SAMEORIGIN – 페이지가 최상위 프레임 셋 홀더와 동일한 도메인에 속하지 않는 한 위와 동일합니다.
사용자는 프레임에 삽입 할 수없는 Google의 Picasa를 포함합니다.
최소 버전의 헤더를 지원하는 브라우저 :
- IE8 및 IE9
- 오페라 10.50
- Safari 4
- 크롬 4.1.249.1042
- Firefox 3.6.9 ( NoScript가있는 이전 버전 )
답변
Stackoverflow에는 테스트 할 JS가 포함되어 있습니다 ( master.js
). 이것은 관련 부분입니다.
if(top!=self){
top.location.replace(document.location);
alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}
그러나 JS를 비활성화 할 수 있습니다.
답변
위해 최신 브라우저 , 당신은 표준 CSP (콘텐츠 보안 정책을) 사용할 수 있습니다. 다음 헤더는 문서가 프레임에로드되지 않도록합니다.
Content-Security-Policy: frame-ancestors 'none'
(IE 11에는 X-
접두사 가 필요합니다 ). 'none'
자신의 사이트와 같이 프레이밍이 허용되는 출처로 변경할 수도 있습니다 .
이전 브라우저를 다루기 위해 @Maerlyn의 답변 과 함께 사용하는 것이 가장 좋습니다 .
답변
자바 스크립트로 iframe에서 페이지를로드하지 못하도록 할 수 있습니다.
<script type="text/javascript">
if ( window.self !== window.top ) {
window.top.location.href=window.location.href;
}
</script>
이 코드는 페이지의 iframe 컨테이너 주소를 페이지 주소로 변경하고 컨테이너가 페이지를 표시하도록합니다.
답변
또는 일부 위치의 콘텐츠는 괜찮지 만 특정 사이트에서는 원하지 않는 경우 특정 도메인을 차단할 수 있습니다. 예를 들어 offendingdomain.com
콘텐츠를 포함하는 경우 다음을 수행 할 수 있습니다.
<script type="text/javascript">
if(document.referrer.indexOf("offendingdomain.com") != -1) {
window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
}
</script>
이것은 상위 문서의 위치를 확인하고 offendingdomain.com
콘텐츠를 포함하고 있는지 확인합니다. 이 스크립트는 처벌로 iframe을 특정 유명한 YouTube 동영상으로 보냅니다. 실제로 그들은 단지 Rick-Rolled였습니다.
답변
javascript를 사용하여 php 파일 끝에 다음 스크립트를 배치하여 iframe에로드되었는지 확인하고 경고를 표시하는 페이지로 리디렉션하거나 iframe을 사용하여 페이지를로드하면 안됨을 확인합니다.
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>
답변
<?php
header("Content-Security-Policy: frame-ancestors 'none'");
?>