我一直在研究HTML5中<iframe>
的sandbox
属性。根据文档,sandbox
属性允许开发人员有选择地限制在<iframe>
中可以执行的操作。那么sandbox
属性纯粹是一个安全措施吗?sandbox
属性是否使得网站设计师能够实现新功能,如果是这样,请提供任何示例。
我一直在研究HTML5中<iframe>
的sandbox
属性。根据文档,sandbox
属性允许开发人员有选择地限制在<iframe>
中可以执行的操作。那么sandbox
属性纯粹是一个安全措施吗?sandbox
属性是否使得网站设计师能够实现新功能,如果是这样,请提供任何示例。
这个功能主要是为了保障安全,但同时也带来了新的功能。例如,嵌入第三方(用户)内容(例如HTML文件)。以往,您需要设置一个单独的域来提供该内容,但现在您可以从任何地方提供它,并将其视为来自单独的域。
此外,它可以防止第三方内容做一些事情,以前您无法防止,例如:
allow-top-navigation
:防止它突破界限allow-pointer-lock
:防止它拦截光标allow-popups
:防止它通过弹出窗口突破界限allow-scripts
:仅阻止所有脚本(也可以通过CSP进行)实际上,结合sandbox
属性和受控的CSP头部,可以在安全环境中运行第三方代码。虽然它还不是100%完美,但我们已经非常接近了。
<script> document.cookie='foo=bar' </script>
<iframe src=testee.html>
testee.html
<script> console.log(document.cookie) </script>
"foo=bar"
。现在向iframe
添加sandbox
属性,cookie就会消失 - 沙箱为testee.html创建了一个单独的运行时环境,在该环境中,它不会收到来自开发过程中打开的其他页面的cookie污染。因此,当您需要一个无菌测试平台但又不能或不想清除浏览器缓存时,这是一个快速简单的解决方案。sandbox属性并不会增加任何额外的功能,它只是限制了iframe的功能。使用它的唯一原因是作为安全措施。
iframe标签中的sandbox
属性是一项纯粹的安全功能。W3的HTML5规范是一个很好的资源。
当设置了该属性时,内容被视为来自唯一的来源,表单、脚本和各种潜在烦人的API被禁用,链接被阻止以定位其他浏览上下文,并且插件被保护。
sandbox
属性添加了限制。关键字重新启用了 iframe
在没有 sandbox
属性的情况下已经具有的功能。 - pstenstrm
sandbox
来影响这些警告。原因可能是在安全环境中仍然需要确定要加载的URL,因此MiTM不安全的沙盒仍将允许许多安全漏洞,并给用户带来虚假的安全感。 - David Mulder