整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

防止网站被iframe内框架调用的方法

天有人反馈了一个在iframe内无法调用网站同一个站点的页面问题并报错,就在网站查了一些相关的资料,整理一下关于禁止网站所有页面或某一个页面被iframe内框架调用的方法。

网站iframe内框架调用页面报错如下

Refused to display http://xxxxxx.com in a frame because it set 'X-Frame-Options' to 'deny'.

通过查到的资料可得知,此错误与iframe框架被调用页面的 HTTP 标头中 X-Frame-Options 设置有关,所以整理了如下资料

X-Frame-Options 介绍

X-Frame-Options是一个HTTP响应头,用来告诉浏览器此页面是否可以在其它网页中的frame或iframe标签中被渲染,网站可以利用此响应头来避免被其它网站所劫持。

X-Frame-Options有三个参数值,分别如下

DENY:表示不能被嵌入到任何iframe或frame中。

SAMEORIGIN:表示页面只能被本站页面嵌入到iframe或者frame中。

url,指定是一个域名,表示此网页只能被指定域名下的页面中的框架所调用

X-Frame-Options 使用如下

html代码

以下代码,添加到HTML页面中的head标签内即可

代码1:html页面禁止被框架调用

<meta http-equiv="X-Frame-Options" content="deny">

代码2:只允许页面被本站调用

<meta http-equiv="X-Frame-Options" content="SAMEORIGIN">

代码3:只允许页面被指定URL嵌套调用

<meta http-equiv="X-Frame-Options" content="http://www.feiniaomy.com">

PHP代码

<?php
//示例1
header('X-Frame-Options: deny');
//示例2
header('X-Frame-Options: SAMEORIGIN');
//示例3
header('X-Frame-Options: http://www.feiniaomy.com');
?>

PS:网站被iframe内框架调用的危害性

攻击者可以使用一个透明的、不可见的iframe标签,加载目标页面,然后通过调整iframe页面的位置,诱导用户进行点击操作页面的功能区,并劫持用户的数据,达到劫持页面的目的。

<script type="text/javascript">

if (window!=top) // 判断当前的window对象是否是top对象

top.location.href =window.location.href; 
// 如果不是,将top对象的网址自动导向被嵌入网页的网址

</script>

段代码是有效的。但是,有一个问题:使用后,任何人都无法再把你的网页嵌入框架了,包括你自己在内。

有没有一种方法,使得我的网页只能被嵌入我自己的框架,而不是别人的框架?

最终代码如下

try{

  top.location.hostname;

  if (top.location.hostname != window.location.hostname) {

    top.location.href =window.location.href;

  }

}

catch(e){

  top.location.href = window.location.href;

}


原文地址:

http://www.ruanyifeng.com/blog/2010/08/anti-frameset_javascript_codes_continued.html

通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面。每份HTML文档称为一个框架,并且每个框架都独立于其他的框架。

使用框架的坏处:

  • 开发人员必须同时跟踪更多的HTML文档
  • 很难打印整张页面

框架结构标签(<frameset>)

  • 框架结构标签(<frameset>)定义如何将窗口分割为框架
  • 每个 frameset 定义了一系列行
  • rows/columns 的值规定了每行或每列占据屏幕的面积

框架标签(Frame)

Frame 标签定义了放置在每个框架中的 HTML 文档。

在下面的这个例子中,我们设置了一个两列的框架集。第一列被设置为占据浏览器窗口的 25%。第二列被设置为占据浏览器窗口的 75%。HTML 文档 "frame_a.htm" 被置于第一个列中,而 HTML 文档 "frame_b.htm" 被置于第二个列中:

<html>
<frameset cols="25%,75%">
 <frame src="/example/html/frame_a.html">
 <frame src="/example/html/frame_b.html">
</frameset>
</html>

HTML基础教程:框架基础