NL3*_*294 7 javascript rel window.open
我知道你可以在 window.open 中使用“noopener”,它明确地告诉你的浏览器禁止子窗口访问父窗口。这应该具有在超链接中使用 rel="noopener" 的效果。
但是,Chrome 88 很快(2021 年?)会将“noopener”设为默认设置。
那么有没有办法做相反的事情,并将其明确设置为“opener”?这样子窗口就可以访问父窗口了吗?我希望在它与最新的 Chrome 断开之前修复我的链接。
我假设它是下面的代码?我不确定在下一版 Chrome 发布之前我会如何测试。但我也不想等到我的链接与下一个版本断开后才进行此更改。
window.open(url,'_blank','toolbar=1,menubar=1,location=1,status=1,scrollbars=1,opener')
Run Code Online (Sandbox Code Playgroud)
或者
window.open(url,'_blank','toolbar=1,menubar=1,location=1,status=1,scrollbars=1', 'opener')
Run Code Online (Sandbox Code Playgroud)
小智 7
HTML 规范对此很清楚,您可以在此处查看。
我将分享window.open步骤的第一部分:
窗口打开步骤,给定一个字符串url,一个字符串目标,一个字符串特征,如下:
如果事件循环的终止嵌套级别非零,则返回 null。
让源浏览上下文作为入口全局对象的浏览上下文。
如果目标是空字符串,则将目标设置为“_blank”。
让 tokenizedFeatures 成为标记特征的结果。
让 noopener 和 noreferrer 为假。
如果 tokenizedFeatures["noopener"] 存在,则:
将 noopener 设置为将 tokenizedFeatures["noopener"] 解析为布尔特征的结果。
移除 tokenizedFeatures["noopener"]。
如果 tokenizedFeatures["noreferrer"] 存在,则:
将 noreferrer 设置为将 tokenizedFeatures["noreferrer"] 解析为布尔特征的结果。
删除 tokenizedFeatures["noreferrer"]。
如果 noreferrer 为 true,则将 noopener 设置为 true。
您还可以在此错误跟踪器中看到,它与添加的提交相关联,编辑仅与锚点有关。我引用
Anchor target=_blank 意味着 rel=noopener
此编辑仅在锚点中完成的原因是因为使用window.open触发此攻击会落入 XSS,因为它需要注入 JavaScript 代码。
此错误涉及的安全问题是,用户可以将错误代码放入您引用但无权访问的页面中。您可以在此处看到它不需要同源。另一个可能的攻击媒介是当您的网站上有用户生成的内容时,但这不太可能,因为您可能会逃避 XSS 的用户输入。
最后要注意的是,此编辑已可供您在 Chrome Canary 中进行测试。