Chrome 5 率先支持 @sandbox HTML 5 功能

Posted by Eyon on May 28, 2010

对于网页开发者来说,最近刚刚发布的 Chrome 5.0 稳定版还加入了一个新的 HTML 5功能——@sandbox,该功能的作用就是允许网页开发者降低他们的部分网页权限,方法很简单,给 iframes 框架加上 sandbox 属性即可,目前 Chrome 是唯一支持该功能的浏览器。

<iframe sandbox src=”http://attacker.com/untrusted.html”></iframe></pre>

比如上面这段代码就是典型的在 iframe 框架中使用 sandbox(沙箱)属性的例子,当浏览器渲染这个 untrusted.html 的时候就会降低该网页的权限,比如禁用 Javascript 代码的执行和弹窗,这个功能其实非常类似于 Chrome 自己的沙箱(Sandbox)引擎。

白名单:

你也可以通过 @sandbox 白名单的方式允许框架中网页的部分权限执行,比如允许上面的 untrusted.html 执行脚本和表单,代码就可以写成下面这样,也就是给 sandbox 属性加一个相应的标记就可以了:

<iframe sandbox="allow-scripts allow-forms" src="http://attacker.com/untrusted.html"></iframe>

不过,上面例子中只会给框架中的 untrusted.html 这个页面开放脚本和表单权限而已,对于没有加入白名单的权限仍然会受到限制,比如创建弹窗或者instantiate plug-ins 都会受到权限的限制(点击这里查看所有支持的指令),最大限度的保证了安全性。

由于目前其他浏览器和一些较老的浏览器都还不支持在 iframe 内使用 @sandbox 属性,所以如果你要使用这个功能的话,最好先考虑一下其他浏览器对网页的渲染。目前的建议就是将 @sandbox 属性作为一个备选安全防线,因为你加了这个元素之后,其他浏览器根本不明白这个属性是干嘛的,就可能导致网页渲染错误。

如果你只想在支持 @sandbox 属性的浏览器中显示不受信任的内容(一般用于测试),你可以使用下面的代码来检测浏览器是否支持 @sandbox 属性:

if ("sandbox" in document.createElement("iframe")) {
   // This browser supports @sandbox.  We can sandbox untrusted
content with confidence.
}


Via [Chromium Blog](http://blog.chromium.org/2010/05/security-in-depth-html5s-sandbox.html)