페이지를로드하는 동안 내 페이지가 다른 사이트에 프레임으로 포함되었는지 어떻게 알 수 있습니까? 리퍼러 요청 헤더가 여기에서 나를 도울 수 없다고 생각합니까? 감사.
페이지를로드하는 동안 내 페이지가 다른 사이트에 프레임으로 포함되었는지 어떻게 알 수 있습니까? 리퍼러 요청 헤더가 여기에서 나를 도울 수 없다고 생각합니까? 감사.
답변:
서버 측에서는 확인할 수 없지만 페이지가로드 된 후 자바 스크립트를 사용하여 감지 할 수 있습니다. 비교 top
및 self
, 동일하지 않은 경우 프레임에 있습니다.
또한 일부 최신 브라우저 X-FRAME-OPTIONS
는 두 가지 값을 가질 수있는 헤더를 존중 합니다.
사용자는 프레임에 삽입 할 수없는 Google의 Picasa를 포함합니다.
최소 버전의 헤더를 지원하는 브라우저 :
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 컨테이너 주소를 페이지 주소로 변경하고 컨테이너가 페이지를 표시하도록합니다.
sandbox
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였습니다.