关于 window.opener 和 iframe 的安全性

信息安全 javascript 同源策略 框架 跨域
2021-09-03 14:42:27

我有 3 个域: domainA domainB domainC

如果我设置一个链接target="_blank"可以访问一堆属性这就是我使用. 否则,像更容易的网络钓鱼这样的事情是可能的。考虑以下代码domainAdomainCdomainCdomainAtarget="_blank" rel="noopener noreferrer"domainC

if(window.opener){
   window.opener.location="http://phishing.com"
}

如果domainA包含类似的链接<a href="https://domainC.com" target="_blank">,条件将触发并重定向domainA到攻击者控制的域。其他属性,比如window.opener.length是可读的。

虽然它实际上并不是真正的漏洞,因为它是由 W3C 定义的,但大多数开发人员都不知道它。

现在,我想包含一个来自domainBin的 iframe domainA,我信任它,但它不受target="_blank"漏洞保护。

我测试并单击了 iframe 上的链接,它看起来不像window.openernull那样noopener noreferrer,但我无法访问它的属性或方法。这样做时(例如:重定向),它会打印:

不安全的 JavaScript 尝试domainB从带有 URL 的框架启动带有 URL 的框架的导航domainC尝试导航的框架既不是与目标同源的,也不是目标的父级或开启者。

那么,我们可以认为在没有保护的情况下包含 iframe 是安全的target="_blank"吗?

1个回答

您正在寻找“沙盒”属性:https : //developer.mozilla.org/en/docs/Web/HTML/Element/iframe

allow-top-navigation:允许嵌入的浏览上下文导航(加载)内容到顶级浏览上下文。如果不使用该关键字,则不允许该操作。