解决禁止网站被别人通过iframe引用嵌套套入

今天介绍四种防iframe的方法。

方法一:JavaScript

<script type="text/javascript">
if(self != top) { top.location = self.location; }
</script>

或者:

if (self == top) {
    var theBody = document.getElementsByTagName('body')[0];
    theBody.style.display = "block";
} else {
    top.location = self.location;
}

上面两段代码都是可以的,原理就是先判断网站是否被嵌套。如果被嵌套,则将浏览器重定向到被嵌套的网站。

把上面的JavaScript代码片段放到你页面的 head 中即可。

要特别说明下这种方法不是很靠谱,可以很轻松使这种方法失效。只需要添加下面代码使JavaScript代码失效,这种方法就没用了。

<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://botailang.com" style="height:100%; visibility: inherit; width: 100%; z-index: 1;overflow: visible;"></iframe>');
</script>//把里面的http://botailang.com换成要嵌套的网址

在介绍第二种方法之前,先介绍一下网站的“X-FRAME-OPTIONS”属性,看名字就能知道,该属性是嵌套选项。分别有三种选择:

DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri:表示该页面可以在指定来源的 frame 中展示。

方法二:meta标签

在需要禁用iframe嵌套的网页head中添加下面代码

<meta http-equiv="X-FRAME-OPTIONS" content="DENY">

以上两种为前端处理方法,就我个人来说不推荐使用,不过这个也是因人而异的,没有绝对的好与差。

方法三:编程语言

以PHP为例,在PHP代码中添加如下代码,即可防止网站被iframe嵌套。

<?php header(‘X-Frame-Options:Deny'); ?>

方法四:服务器配置

下面分别说明Apache、NGINX和IIS中如何配置,来防止网站被嵌套。原理与方法三相同,即发送消息头告知浏览器本网站不想被嵌套。

首先是Apache。在Apache的配置文件的“site”中添加如下配置,即可。

Header always append X-Frame-Options SAMEORIGIN

虚拟机由于无法修改配置文件,可以将如下代码加入网站根目录的“.htaccess”文件中,效果相同。

Header append X-FRAME-OPTIONS "SAMEORIGIN"

目前势头正旺的NGINX可以在配置文件的http、server或者location中加入如下代码,来防止被嵌套。

add_header X-Frame-Options "SAMEORIGIN";

在IIS中,可以将网站根目录的web.config配置文件做如下修改,来禁止网站被嵌套。

<system.webServer>
    ...
    <httpProtocol>
    <customHeaders>
    <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
    </httpProtocol>
    ...
    </system.webServer>

如此这般之后,你的网站就不会被第三方网站嵌套了。

原地址:https://ihongchao.com/post/578/

https://segmentfault.com/q/1010000000669877