相对于html4.0来说,html5在安全性方面有了很大的提升,甚至html5的标志看上去就像一块盾牌。其中iframe的sandbox特性,就是html5安全中很重要的组成部分部分。于此同时还带来了一个新的mime类型,text-html/sandboxed。
下面先简单介绍一下html5的iframe特性:
相对于我们平时所熟知的<iframe>标签的特性,比如“src”,“width”,"name"等,html5中iframe多了如下三个属性:
srcdoc, sandbox , seamless,其中最令人眼前一亮的莫过于sandbox属性了
一、<iframe>的sandbox属性。
在html5页面中,可以使用iframe的sandbox属性,比如:<iframe src="http://alibaba.com" sandbox>,sandbox后面如果不加任何值,就代表采用默认的安全策略,即:iframe的页面将会被当做一个独自的源,同时不能提交表单,以及执行javascript脚本,也不能让包含iframe的父页面导航到其他地方,所有的插件,如flash,applet等也全部不能起作用。简单说iframe就只剩下一个展示的功能,正如他的名字一样,所有的内容都被放入了一个单独的沙盒。
我写了两个html页面简单演示了一下iframe的sandbox功能,由iframe_sandbox.htm去包含inside.htm
iframe_sandbox.htm代码如下:
======================================================================
<!DOCTYPE html> <!--html5头 -->
<html>
<iframe src="inside.htm" sandbox ></iframe> <!-- iframe 标签,其中sandbox没有值,表示默认策略-->
</html>
======================================================================
inside.htm代码如下:
======================================================================
<!DOCTYPE html>
<html>
本窗口<script>document.write(window.location.href)</script><br>
父窗口<script>document.write(window.parent.location.href)</script><br>
<a href="http://hi.baidu.com/dingody/home" target="_blank">blank</a>
<a href="http://hi.baidu.com/dingody/home" target="_self">self</a>
<a href="http://hi.baidu.com/dingody/home" target="_parent">parent</a>
<a href="http://hi.baidu.com/dingody/home" target="_top">top</a>
<form id="form" action="http://hi.baidu.com/dingody/home" >
<input type="submit" value="sub">
</form>
</html>
======================================================================
chrome浏览器(ff和ie都暂不支持)打开iframe_sandbox.htm显示如下:
iframe页面的脚本并没有执行,同时blank,paren,top链接全部失效,sub按钮也没有反应。只有self安全可以导向到指定页面。
1、 接下来修改sandbox属性为allow-scripts,<iframe id="test" src="inside.htm" sandbox="allow-scripts"></iframe>
显示如下:
iframe页面的脚本可以执行,但是依然不能访问父页面的属性,同时其他链接和按钮依然失效。
2、修改sandbox属性为 allow-top-navigation:
blank,self,parent,top链接全部生效
3、修改sandbox 属性为: allow-forms
sub按钮点击生效
4、修改sandbox属性为: allow-scripts allow-same-origin,显示如下:
同源策略生效:
以上的这些例子简单的演示了sandbox的用法。
其实一旦我们在sandbox属性里面同时使用了allow-scripts allow-same-origin属性的话,子页面就可以操纵父页面的标签了,也就是说,在同时设置了allow-script allow-same-origin的时候,sandbox策略就失效了。html5的官方文档里面也有这样的提示:
Setting both the allow-scripts and allow-same-origin keywords together when the embedded page has the same origin as the page containing the iframe allows the embedded page to simply remove the sandbox attribute.
我在测试子页面remove父页面的iframe的sandbox属性的时候遇到一个问题,那就是必须子页面进行一次刷新才能生效。比如这样的代码:
inside.htm代码如下:
======================================================================
document.write(window.parent.document.getElementById("test").sandbox="allow-scripts allow-top-navigation allow-same-origin");
======================================================================
经过测试发现,在浏览器第一次渲染的时候,代码是不生效的,只有iframe中的页面重新载入,才能突破sandbox。
猜测是这样的情况。
1、浏览器经过第一次渲染的时候,子页面的sandbox属性是allow-scripts allow-same-origin,这个时候渲染已经完成,虽然子页面将父页面的iframe属性设置为allow-scripts allow-top-navigation allow-same-origin,但是子页面里面的dom属性依然不变。
2、经过一次子页面的刷新之后,子页面的dom转换成具有allow-scripts allow-top-navigation allow-same-origin属性的dom,所以成功。
下面给出一个子页面操作父页面sandbox属性的例子,通过一次页面刷新实现:
<script>
function reurl(){
url = location.href;
var times = url.split("?");
if(times[1] != 1){
url += "?1";
self.location.replace(url);
}
}
if(window.parent.length>0){onload=reurl;}
document.write(window.parent.document.getElementById("test").sandbox="allow-scripts allow-top-navigation allow-same-origin");
</script>
二、iframe的其他属性:
目前应该还没有浏览器支持这些,仅仅停留在文档上
srcdoc属性用法如下:<iframe srcdoc="<p>dingo</p>"></iframe>
seamless属性用法如下:<iframe seamless="seamless" src="xxx"></iframe> 效果就是渲染出来的页面你看不出是用iframe内嵌的,而是与现在的文档相融合,去掉了恶心的边框。
三、text-html/sandboxed
iframe的sandbox属性另外附带了一个新的MIMEtype,text-html/sandboxed。这个目前应该也没有浏览器实现。格式位text-html/sandboxed的内容将会跟设置了sandbox属性的iframe子页面一样,被严格控制。
- 大小: 18.2 KB
- 大小: 12.6 KB
- 大小: 15.4 KB
分享到:
相关推荐
5. **跨域支持**:尽管同源策略限制了iframe与父页面的交互,但Flex-Iframe提供了一种跨域解决方案,允许不同源的页面进行通信。 6. **向下兼容**:1.4.1版本强调了对旧版浏览器的支持,这意味着即使是在IE9这样的...
5. **事件监听与传递**:为了实现IFRAME间的交互,你可能需要监听IFRAME外的链接点击事件,然后传递给IFRAME内,或者相反。可以使用`addEventListener`添加事件监听器,使用`dispatchEvent`或`window.postMessage`...
这个模板采用HTML5技术,确保了在现代浏览器中的良好兼容性和性能表现。 layui框架的核心特点是模块化设计,它将页面元素如表格、按钮、表单等拆分为独立的模块,便于开发者按需引入,降低了代码冗余,提高了开发...
layui是一款优秀的前端轻量级框架,以其简洁、强大的特性和丰富的UI组件,深受开发者喜爱。这个压缩包的核心是帮助开发者理解和实现基于layui的iframe页面嵌入,以实现多页面同窗口展示的效果。 layui框架本身提供...
不同的Flex版本可能引入了新的特性和API,因此选择正确的版本对于避免兼容性问题至关重要。 总的来说,`flex-iframe`为Flex开发者提供了一种强大的工具,使他们能够在Flex应用中整合HTML内容,丰富应用的功能和视觉...
layui是一款流行的国产前端UI框架,它的核心特性是模块化、易用性和高性能。"layui-iframe.rar"这个压缩包很可能是layui的一个应用场景,涉及到在页面中使用layui框架创建iframe组件的示例或模板。 layui的设计理念...
HTML5是现代网页开发的标准,它提供了许多增强用户体验的新特性,包括更好的图形处理、媒体支持以及更强大的数据存储能力。Bootstrap则是最受欢迎的前端框架之一,它简化了网站设计,提供了响应式布局和易于使用的...
在HTML5中,`iframe`跨域通信是一个重要的特性,它允许不同的源(域名、协议或端口)之间进行安全的数据交换。`postMessage` API是实现这一功能的关键,为了解决传统`iframe`跨域限制的问题,提供了一种安全且灵活的...
为了优化跨域通信,HTML5引入了`sandbox`属性,允许开发者对iframe设置安全限制。此外,`srcdoc`属性则允许直接在iframe内嵌入HTML代码,而不是指向外部URL。 总的来说,HTML折叠框架iframe结合JavaScript和CSS,...
它们通常是社区成员为了满足特定需求而创建的,"homeassistant-iframe卡"就是一个这样的组件,它提供了标准卡片所不具备的特性,即在家庭助理的界面上嵌入一个iframe。 2. **IFrame**: IFrame(Inline Frame)是...
HTML中的`iframe`元素是一种非常实用的特性,它允许我们在一个网页中嵌入另一个网页,实现页面内容的组合和复用。在某些情况下,我们可能希望`iframe`的背景是透明的,以便与父页面更好地融合。这篇博客将探讨如何...
iframe(Inline Frame)是一种HTML标签,用于在页面中嵌入另一个文档,可以是HTML、SVG或者任何其他支持的资源。它允许我们在一个页面中展示多个独立的内容区域,这对于实现模块化设计或者嵌入第三方内容非常有用。 ...
在这种场景下,原始的iframe技术可能会显得过时,因为它通常不支持单页应用(SPA)的特性,如路由管理和组件状态管理。标题提到的“vue 页面tabs切换,替换iframe”,就是指用Vue的特性和组件来实现更加现代和灵活的...
在网页开发中,"基于iframe的js动态标签tab"是一个常见的功能实现,它结合了JavaScript、IFrame和Tab标签页的特性,为用户提供了一个交互式的浏览体验。这种技术主要用于在单个页面上加载和切换多个独立的内容区域,...
5. **广告展示**:很多广告平台会提供`iframe`代码供网站嵌入广告。 6. **应用组件**:在网页中嵌入第三方应用,如Google Docs、Calendars等。 **三、跨域通信** 由于浏览器的同源策略,`iframe`内的页面与父页面...
总之,这个项目为我们提供了一个了解和实践JavaScript中iFrame特性的机会,同时也涉及到本地开发环境的搭建和测试流程。通过这个项目,我们可以深入学习如何在实际应用中有效地使用和测试iFrame,以及如何利用...
iframe的源URL必须来自白名单,且应尽可能优化加载速度,以保持AMP的快速特性。 综上所述,虽然AMP环境对JavaScript和DOM操作有限制,但我们可以通过amp-iframe和cookie技术在AMP博客中实现购物车功能。这个过程...
HTML5引入了一系列新特性,使得这项任务变得更加高效和便捷。本篇将重点讲解如何利用HTML5的`postMessage`和`iframe`技术来实现文件的跨域异步上传。 `postMessage`是HTML5中一种强大的通信机制,它允许来自不同源...
【描述】"WEB无插件开发包_v3.2,可iframe集成"的描述进一步强调了这个包的主要特性:无插件和iframe集成。无插件意味着它利用HTML5、CSS3和JavaScript等现代Web技术,使得用户在访问网站时不再需要安装额外的浏览器...
首先,要了解的是IFRAME是一种HTML元素,它允许在当前HTML文档中嵌入另一个独立的HTML页面。尽管这一特性带来了许多便利,但同时也带来了诸如内容覆盖、Z-index层叠问题以及不同浏览器兼容性问题等。 第一种情况是...