我试图弄清楚是否可以以编程方式更改 iFrame 沙箱的值。
来自 MDN iframe:
当嵌入文档与主页具有相同来源时,强烈建议不要同时使用allow-scripts 和allow-same-origin,因为这会允许嵌入文档以编程方式删除沙箱属性。虽然可以接受,但这种情况并不比不使用沙箱属性更安全。
但是,更改父级中的属性不会成功触发沙箱,因为这会在子级中触发。
document.getElementById('myFrame').setAttribute('sandbox', 'allow-scripts');
Run Code Online (Sandbox Code Playgroud)
该 iFrame 中加载的页面可以成功访问父级,如果沙箱正常工作,则不会出现这种情况。该属性确实发生了变化,但安全性存在缺陷,因为它不会阻止对专利的访问。
console.log(window.parent.document);
Run Code Online (Sandbox Code Playgroud)
上述内容在“以编程方式”启用沙箱的 iFrame 中仍然有效。Chrome 和 Firefox 都是这种情况,这意味着要么是未记录的预期功能,要么是规范实施不当。
有人知道什么是适当的期望吗?