防止网页被别人的iframe嵌套

很多人做的网站、博客会被别人用嵌套成为别人的网站,而浏览器可能还会收录这些盗用者的页面,结果自己做的网站反而让别人增加了排名,这是无法接受的。

那么如何防止网页被别人的iframe嵌套,防止别人低成本地镜像自己的网站呢?最简单的方法,是使用js在做个前端处理:

<script type="text/JAVAscript"> window.onload=function(){ if(window.top != window.self)window.top.location = window.self.location; } </script>

原理就是判断 window.top 是不是 window.self,如果不是则说明被嵌套了,强制把自己的location替换到top去,实现反嵌套。核心语句是这个

if(window.top != window.self)window.top.location = window.self.location;

但由于方法简单,所以也很容易被人破解。如果别人在引用iframe的时候,是通过document.write(‘<iframe></iframe>’),那么上面的js代码就无法生效,比如:

document.write('<iframe frameborder="0" scrolling="yes" name="main" src="http://你的网址" style="height:100%; visibility: inherit; width: 100%; z-index: 1;overflow: visible;"></iframe>');

所以网上很多文章会建议使用Meta标签加 X-FRAME-OPTIONS 属性,通过浏览器来判断和拒绝被嵌套页面的显示:

<meta http-equiv =“X-Frame-Options”contents =“DENY”>

这个仍然是在前端页面里做的,由于其不可靠, X-FRAME-OPTIONS 特性已经逐渐被浏览器弃用了,因此现在也不好使了,但它被保留在了服务器端,通过添加响应头的方法实现避免网页被嵌套,大多数浏览器能支持。

X-Frame-Options 有三个值:

DENY

表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

SAMEORIGIN

表示该页面可以在相同域名页面的 frame 中展示。

ALLOW-FROM uri

表示该页面可以在指定来源的 frame 中展示。

方法1:在服务器端,可通过修改web服务的配置来实现,适合所有的静态页面或者动态页面:

配置 Apache的方法:

例1:在所有页面上发送 X-Frame-Options 响应头

Header always Append X-Frame-Options SAMEORIGIN

例2:配置 X-Frame-Options 设置成拒绝

Header set X-Frame-Options "deny"

例3:配置 X-Frame-Options 设置成 allow-from

Header set X-Frame-Options "allow-from https://example.com/"

配置 Nginx的方法:

add_header X-Frame-Options SAMEORIGIN always;

方法2:在服务器端,也可以通过设置后端语言的http响应头来实现:

php

header('X-Frame-Options:Deny');

asp

Response.AddHeader("X-Frame-Options", "Deny");

方法1或2任选其一即可,至此,终于完美解决!


    © 版权声明
    THE END
    支持博主,更新加速
    点赞3赞赏 分享
    勋章统计

    评论一下 抢沙发

    请登录后发表评论

      请登录后查看评论内容