您能否帮我理解HTML5 iframe沙箱属性的Chrome实现允许同源和允许顶级导航?
第一个问题:
例如,当我测试allow-same-origin时,我做了:
<iframe id='frm' src="file.html" sandbox="allow-same-origin"></iframe>
...
oIFrame = document.getElementById('frm');
var oDoc = (oIFrame.contentWindow || oIFrame.contentDocument);
if (oDoc.document) {
oDoc = oDoc.document;
oDoc.getElementById('foo').innerText = 'Hello man!';
...
file.html的内容:
...
<div id="foo">Hello</div>
...
alert(document.cookie);
...
只有当我有一个名为allow-scripts的附加属性时才有效,所以我有sandbox =“allow-scripts allow-same-origin”。单独允许 - 同源不起作用并且单独允许 - 脚本运行良好(脚本运行但不与API SOP相关,它可以考虑HTML5标准)。
HTML5标准说:
“首先,它可用于允许来自同一站点的内容进行沙盒化以禁用脚本,同时仍允许访问沙盒内容的DOM。”
我误解了Chrome或Chrome实施是错误的吗?
第二个问题:
HTML5标准说关于allow-top-navigation:
“其次,它可用于嵌入来自第三方网站的内容,沙箱以防止该网站打开弹出窗口等,而不会阻止嵌入式页面与其原始网站进行通信,使用数据库API存储数据等“
Chrome中的弹出窗口未被阻止。我怎么能阻止它们?我只使用allow-top-navigation。
干杯, 大卫
答案 0 :(得分:1)
对于第一个问题:
看来这意味着父页面仍然可以访问沙盒<iframe>
的DOM,而<iframe>
本身的脚本被阻止执行;所以它只是parent -> iframe
而不是iframe -> parent
第二个问题:
也许我误解了,但正如名称allow-top-navigation
暗示这将允许而不是阻止框架网站使用top.location.replace()
之类的内容。