HTML5 iframe沙盒属性的价值

13

我一直在研究HTML5中<iframe>sandbox属性。根据文档,sandbox属性允许开发人员有选择地限制在<iframe>中可以执行的操作。那么sandbox属性纯粹是一个安全措施吗?sandbox属性是否使得网站设计师能够实现新功能,如果是这样,请提供任何示例。

4个回答

11

这个功能主要是为了保障安全,但同时也带来了新的功能。例如,嵌入第三方(用户)内容(例如HTML文件)。以往,您需要设置一个单独的域来提供该内容,但现在您可以从任何地方提供它,并将其视为来自单独的域。

此外,它可以防止第三方内容做一些事情,以前您无法防止,例如:

  • allow-top-navigation:防止它突破界限
  • allow-pointer-lock:防止它拦截光标
  • allow-popups:防止它通过弹出窗口突破界限
  • allow-scripts:仅阻止所有脚本(也可以通过CSP进行)

实际上,结合sandbox属性和受控的CSP头部,可以在安全环境中运行第三方代码。虽然它还不是100%完美,但我们已经非常接近了。


1
那么它是否允许在以前无法使用的情况下使用https? - Ben Pearce
1
@BenPearce,我不知道你的问题是什么意思... HTTPS 可以在 HTTP 可以使用的任何地方使用,就目前而言,它与所有这些都没有任何关系(尽管我可能会忘记某些事情...)。 - David Mulder
1
我所说的是URL旁边的“锁”图标,它意味着该站点符合安全要求。一个普通的iframe能破坏它吗?如果可以,那么一个沙盒化的iframe是否能够保留它呢? - Ben Pearce
2
@BenPearce 啊,混合内容警告之类的问题?据我所知,没有浏览器使用sandbox来影响这些警告。原因可能是在安全环境中仍然需要确定要加载的URL,因此MiTM不安全的沙盒仍将允许许多安全漏洞,并给用户带来虚假的安全感。 - David Mulder
“允许”是指“防止”吗?因此,要“允许全部”,我们必须完全“移除沙盒属性”?即使如此,我也无法使我的帧内容按钮调用jQuery代码工作。我的jQuery代码在帧内容内部,不会从父/容器页面调用任何函数。它也不允许执行我的jQuery。顺便说一下,父页面是JSFiddle。 - Antonio Ooi

3
沙盒在测试中确实非常有用。考虑以下内容: tester.html
<script> document.cookie='foo=bar' </script>
<iframe src=testee.html>

testee.html

<script> console.log(document.cookie) </script>

当加载tester.html时,您将在控制台上看到testee.html转储的"foo=bar"。现在向iframe添加sandbox属性,cookie就会消失 - 沙箱为testee.html创建了一个单独的运行时环境,在该环境中,它不会收到来自开发过程中打开的其他页面的cookie污染。因此,当您需要一个无菌测试平台但又不能或不想清除浏览器缓存时,这是一个快速简单的解决方案。

2

sandbox属性并不会增加任何额外的功能,它只是限制了iframe的功能。使用它的唯一原因是作为安全措施。


2

iframe标签中的sandbox属性是一项纯粹的安全功能。W3的HTML5规范是一个很好的资源。

当设置了该属性时,内容被视为来自唯一的来源,表单、脚本和各种潜在烦人的API被禁用,链接被阻止以定位其他浏览上下文,并且插件被保护。


1
那么沙盒属性是否允许您在“https”上执行先前只能在“http”上执行的与 iframe 相关的操作? - Ben Pearce
1
sandbox 属性添加了限制。关键字重新启用了 iframe 在没有 sandbox 属性的情况下已经具有的功能。 - pstenstrm
1
我想问的是,是否存在这样的情况:非沙盒 iframe 会破坏 https,但沙盒化的 iframe 不会。 - Ben Pearce
1
我认为你应该更新你的问题和标题来明确说明。 - pstenstrm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接