如何防止我的网站页面通过iFrame的第三方网站框架加载
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何防止我的网站页面通过iFrame的第三方网站框架加载相关的知识,希望对你有一定的参考价值。
如何在页面加载期间找到我的页面作为框架嵌入到其他网站?我猜引用请求标题在这里无法帮助我?谢谢。
您无法从服务器端检查它,但您可以在页面加载后使用javascript检测它。比较top
和self
,如果它们不相同,那么你就是一个框架。
此外,一些现代浏览器尊重X-FRAME-OPTIONS
标头,它可以有两个值:
- DENY - 如果页面包含在页面中,则会阻止页面呈现
- SAMEORIGIN - 与上面相同,除非页面属于与顶级框架集持有者相同的域。
用户包括Google的Picasa,无法嵌入到框架中。
支持标题的浏览器,最小版本:
- IE8和IE9
- 歌剧院10.50
- Safari 4
- Chrome 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可以被禁用。
对于modern browsers,您可以使用CSP(内容安全策略),这是一个标准。以下标题将阻止文档在任何位置加载到框架中:
Content-Security-Policy: frame-ancestors 'none'
(IE 11需要X-
前缀)。您还可以将'none'
更改为允许框架的原点,例如您自己的网站。
要覆盖旧版浏览器,最好与@Maerlyn's answer一起使用。
您可以使用javascript阻止在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检查它是否已加载到iframe上,方法是将以下脚本放在php文件的末尾,然后重定向到显示警告的页面或注意不应使用iframe加载页面。
<script type="text/javascript">
if(top.location != window.location) {
window.location = '/error_iframe.php';
}
</script>
以上是关于如何防止我的网站页面通过iFrame的第三方网站框架加载的主要内容,如果未能解决你的问题,请参考以下文章