Javascript 阻止IFRAME嵌入,但有一个例外

Javascript 阻止IFRAME嵌入,但有一个例外,javascript,iframe,Javascript,Iframe,假设我们在给定位置有一个网页,如www.foo.com/page1.html,该网页包含以下全局代码: if (self != top) { top.location.replace(location.href); } 因此,如果我们尝试将该页面加载到IFRAME中,该页面将跳出IFRAME进入浏览器窗口,从而破坏包含IFRAME的页面 这是可以的,但我想实现该规则的一个例外。具体来说,在另一个域上有另一个页面,比如www.bar.com/page2.html,我希望这个页面能够通过I

假设我们在给定位置有一个网页,如www.foo.com/page1.html,该网页包含以下全局代码:

if (self != top) {
    top.location.replace(location.href);
}
因此,如果我们尝试将该页面加载到IFRAME中,该页面将跳出IFRAME进入浏览器窗口,从而破坏包含IFRAME的页面

这是可以的,但我想实现该规则的一个例外。具体来说,在另一个域上有另一个页面,比如www.bar.com/page2.html,我希望这个页面能够通过IFRAME嵌入第一个页面

我必须如何修改第一个页面的代码,以便它可以嵌入到另一个页面中

这样行吗

if (self != top && top.location.href !== "http://www.bar.com/page2.html") {
    top.location.replace(location.href);
}

我怀疑您是否能够检查外部父页面的URL,因为应该阻止对其任何属性的访问

也许有一些我知道的诡计允许它。除此之外,我想到的最好的办法就是检查文件。推荐人。据我所知,在iframe中请求的文档将始终在不同浏览器的引用中包含嵌入页面的URL

如果推荐人是http://www.bar.com/page2.html,页面要么在该页面上的iframe中,要么从那里链接到该页面,这是该方法唯一真正的大缺点:您无法100%确定它是传入链接还是iframe嵌入


显然,客户对文档的引用是虚构的,但我不认为这是一个问题

我怀疑您是否能够检查外部父页面的URL,因为应该阻止对其任何属性的访问

也许有一些我知道的诡计允许它。除此之外,我想到的最好的办法就是检查文件。推荐人。据我所知,在iframe中请求的文档将始终在不同浏览器的引用中包含嵌入页面的URL

如果推荐人是http://www.bar.com/page2.html,页面要么在该页面上的iframe中,要么从那里链接到该页面,这是该方法唯一真正的大缺点:您无法100%确定它是传入链接还是iframe嵌入


显然,客户对文档的引用是虚构的,但我不认为这是一个问题

如果您将X-FRAME-OPTIONS http头的值传递给SAMEORIGIN,那么包括IE8在内的大多数现代浏览器将不允许从外来域对内容进行iframed


我认为这可能会有所帮助。

如果您传递的X-FRAME-OPTIONS http头的值为SAMEORIGIN,那么包括IE8在内的大多数现代浏览器都不会允许从外来域对内容进行格式化


我认为这可能会有帮助。

不幸的是,我认为这是一个问题。foo.com页面不是我的,我想让所有者给我bar.com嵌入权。。。但是如果有人可以欺骗推荐人的属性,那么在这里就行不通了。@Šime只有特定的客户才能欺骗他们自己的推荐人;foo.com无法为所有访问该网站的客户端欺骗它。特定的客户端总是可以通过简单地关闭Javascript来破坏您的测试,这样您就永远不会100%安全anyway@Pekka那bar.com呢。可以设置foo.com的document.referer吗?我想说,这是因为同一原产地政策,对吗?@Šime是的,只有bar.com会获得foo.com作为推荐人,但不是相反。它由浏览器设置为只读。它可以在客户端使用欺骗,例如。请注意,此方法无法区分用户是否跟随foo.com上指向bar.com的链接(这是referer属性的原始想法),还是正在查看iframe嵌入。我不认为这是一个很大的缺点,因为没有直接链接到bar.com,但要知道这一点很重要of@Pekka但是foo.com是我想要嵌入的页面,bar.com是包含IFRAME的页面。所以,foo.com是referer属性指向bar.com的一个。不幸的是,我认为这是一个问题。foo.com页面不是我的,我想让所有者给我bar.com嵌入权。。。但是如果有人可以欺骗推荐人的属性,那么在这里就行不通了。@Šime只有特定的客户才能欺骗他们自己的推荐人;foo.com无法为所有访问该网站的客户端欺骗它。特定的客户端总是可以通过简单地关闭Javascript来破坏您的测试,这样您就永远不会100%安全anyway@Pekka那bar.com呢。可以设置foo.com的document.referer吗?我想说,这是因为同一原产地政策,对吗?@Šime是的,只有bar.com会获得foo.com作为推荐人,但不是相反。它由浏览器设置为只读。它可以在客户端使用欺骗,例如。请注意,此方法无法区分用户是否跟随foo.com上指向bar.com的链接(这是referer属性的原始想法),还是正在查看iframe嵌入。我不认为这是一个很大的缺点,因为没有di
rect链接到bar.com,但注意这一点很重要of@Pekka但是foo.com是我想要嵌入的页面,bar.com是包含IFRAME的页面。因此,foo.com是referer属性指向bar.com的一个。