2009-12-03 4 views
0

IFrameable 콘텐츠를 만들고 있습니다. 우리는 사용자가이 페이지를 IFrame화할 수 있기를 원하지만 도메인의 집합 목록에서만 가능합니다.하우투 화이트리스트가있는 IFrame 방지

상위 페이지의 도메인 이름이 무엇인지 확인할 수있는 항목이 있습니까? 해당 페이지는 사용자의 보안 컨텍스트 (동일 기원 정책)에없는 경우

if (top != self) { top.location.replace(self.location.href); } 

답변

2

아니, 상위 페이지의 location이 표시되지 않습니다. 물론 자신의 프레임의 document.referrer을 볼 수는 있지만 완전히 방수가되는 것은 아닙니다 ... 클라이언트 측의 리퍼러 검사는 서버 측보다 약간 쓸모가 없지만 다음과 같은 방법으로 우회 할 수 있습니다 프레임의 리프레시 전달자.

Content Security Policyframe-ancestors 제한은 언젠가 이것을 허용 할 수 있습니다.

2

bobince가 말한 것처럼 document.referrer이 최선의 선택입니다. iFrame의 src가 될 페이지에서이를 확인할 수 있습니다. 그러나 HTTP 리퍼러 정보는 쉽게 스푸핑 될 수 있으므로이 방법은 안전하지 않습니다. 나는 페이지가 화이트리스트 도메인에서로드되어 있는지 확인하려면이 옵션을 사용하고 How to bypass the REFERER security check

+0

대부분의 사람들은 iframe을 사이트에 구축하고 유효한 referer를 전달할만큼 충분히 숙련되지 않았을 것입니다. 목표는 일반 대중이 다른 사람의 사이트에서 iframe을 보지 못하게하는 것입니다. 정보 주셔서 감사합니다. – Slashterix

+1

그게 내가 생각한 것이기 때문에,'document.referrer'는 그 일을 끝낼 것입니다. – sachleen

1

:

이 문서에서는 PHP를 사용하여 작업을 수행하는 방법을 보여줍니다. 이 문제를 해결할 방법이있을 것이라고 확신하지만 작동하는 것 같습니다.

var currentUrl = document.referrer; 
var okayUrl = "http://good-domain.com"; 
var okayUrl2 = "http://another-good-domain.com"; 

//check if page is loaded in iframe 
if (window.location !== window.parent.location) { 
    //check if parent is a whitelisted domain 
    if (currentUrl == okayUrl || currentUrl == okayUrl2) 
    { 
    //if it is a good domain, then just log the parent url or something 
    console.log(currentUrl); 
    } else { 
    //if it is a bad domain, then do something about it 
    alert ("Woah buddy. Can't touch this!"); 
    window.location = "http://en.wikipedia.org/wiki/Rickrolling"; 
    } 
}