我有 3 个域: domainA domainB domainC
如果我设置一个链接target="_blank"
,可以访问一堆属性。这就是我使用. 否则,像更容易的网络钓鱼这样的事情是可能的。考虑以下代码:domainA
domainC
domainC
domainA
target="_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 定义的,但大多数开发人员都不知道它。
现在,我想包含一个来自domainB
in的 iframe domainA
,我信任它,但它不受target="_blank"
漏洞保护。
我测试并单击了 iframe 上的链接,它看起来不像window.opener
它null
那样noopener noreferrer
,但我无法访问它的属性或方法。这样做时(例如:重定向),它会打印:
不安全的 JavaScript 尝试
domainB
从带有 URL 的框架启动带有 URL 的框架的导航domainC
。尝试导航的框架既不是与目标同源的,也不是目标的父级或开启者。
那么,我们可以认为在没有保护的情况下包含 iframe 是安全的target="_blank"
吗?