今天介绍四种防iframe的方法。
方法一:JavaScript
1 2 3 |
<script type="text/javascript"> if(self != top) { top.location = self.location; } </script> |
1 2 3 4 5 6 |
if (self == top) { var theBody = document.getElementsByTagName('body')[0]; theBody.style.display = "block"; } else { top.location = self.location; } |
上面两段代码都是可以的,原理就是先判断网站是否被嵌套。如果被嵌套,则将浏览器重定向到被嵌套的网站。
把上面的JavaScript代码片段放到你页面的 head 中即可。
要特别说明下这种方法不是很靠谱,可以很轻松使这种方法失效。只需要添加下面代码使JavaScript代码失效,这种方法就没用了。
1 2 3 |
<script type="text/javascript" charset="utf-8"> document.write('<iframe seamless sandbox security="restricted" id="url_mainframe" frameborder="0" scrolling="yes" name="main" src="http://ihongchao.com" style="height:100%; visibility: inherit; width: 100%; z-index: 1;overflow: visible;"></iframe>'); </script>//把里面的http://ihongchao.com换成要嵌套的网址 |
在介绍第二种方法之前,先介绍一下网站的“X-FRAME-OPTIONS”属性,看名字就能知道,该属性是嵌套选项。分别有三种选择:
1 2 3 |
DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。 ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示。 |
方法二:meta标签
在需要禁用iframe嵌套的网页head中添加下面代码
1 |
<meta http-equiv="X-FRAME-OPTIONS" content="DENY"> |
以上两种为前端处理方法,就我个人来说不推荐使用,不过这个也是因人而异的,没有绝对的好与差。
方法三:编程语言
以PHP为例,在PHP代码中添加如下代码,即可防止网站被iframe嵌套。
1 |
<?php header(‘X-Frame-Options:Deny'); ?> |
方法四:服务器配置
下面分别说明Apache、NGINX和IIS中如何配置,来防止网站被嵌套。原理与方法三相同,即发送消息头告知浏览器本网站不想被嵌套。
首先是Apache。在Apache的配置文件的“site”中添加如下配置,即可。
1 |
Header always append X-Frame-Options SAMEORIGIN |
虚拟机由于无法修改配置文件,可以将如下代码加入网站根目录的“.htaccess”文件中,效果相同。
1 |
Header append X-FRAME-OPTIONS "SAMEORIGIN" |
目前势头正旺的NGINX可以在配置文件的http、server或者location中加入如下代码,来防止被嵌套。
1 |
add_header X-Frame-Options "SAMEORIGIN"; |
在IIS中,可以将网站根目录的web.config配置文件做如下修改,来禁止网站被嵌套。
1 2 3 4 5 6 7 8 9 |
<system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> ... </system.webServer> |
如此这般之后,你的网站就不会被第三方网站嵌套了。