5月30日 01:00

iframe 的 sandbox 有什么作用?如何安全配置权限?

iframe 的 sandbox 是给嵌入页面加一层浏览器级限制:默认禁止脚本、表单、弹窗、顶层跳转,并把内容放进独立的特殊源。安全配置的原则是先空 sandbox,再按功能逐项放开;最危险的组合是同源页面同时给 allow-scriptsallow-same-origin,子页面可能移除 sandbox 或访问同源能力。

追问

空 sandbox 和不写 sandbox 有什么区别?

空 sandbox 是最严格模式;不写 sandbox 等于 iframe 按普通页面运行。第三方、不可信 HTML、广告位优先用空 sandbox。

常用权限怎么选?

只展示内容:sandbox;需要 JS:allow-scripts;需要提交表单:加 allow-forms;需要弹窗:加 allow-popups;需要跳转父页面,优先用 allow-top-navigation-by-user-activation,别直接用 allow-top-navigation

为什么 allow-scripts + allow-same-origin 危险?

如果 iframe 和父页同源,脚本恢复后可能读写同源资源,甚至移除自身 sandbox。可信内部页可以用,不可信内容不要这么配。

实际项目里还要配什么?

配合 CSP 的 frame-src 限制可嵌入来源,并定期审查权限。sandbox 是能力限制,CSP 是来源限制,两者解决的问题不一样。

写段代码

html
<iframe src="https://third.example" sandbox></iframe> <iframe src="https://widget.example" sandbox="allow-scripts allow-forms"></iframe>
标签:Iframe