天天看点

target=”_blank” 有漏洞了 Html打开新窗口也能实施钓鱼攻击

target=”_blank”这个看着眼熟吗? target=”_blank”有漏洞了。这个属性是用在html 代码中打开一个新窗口,然而这个动作将会给攻击者实施钓鱼攻击带来机会。

​现在,许多主流的互联网服务提供商都会在网页的链接地址中加入target=”_blank”属性,而这绝对是一种非常不安全的行为。不仅如此,target=”_blank”属性还将会使广大互联网用户暴露在钓鱼攻击的风险之下。

当用户点击了某个网站中带有target=”_blank”属性的超链接后,浏览器会单独新建一个标签页来显示该链接所指向的内容。但是请注意,在这一瞬间,浏览器会允许新建的标签页通过一个名为“window.opener”的浏览器api来与之前的网页进行短暂通信。

此时,攻击者就可以将恶意代码嵌入在新打开的网站中,然后检测用户是从哪一个网站跳转过来的,最后再利用window.opener接口来迫使原始网页打开一个新的url地址。

比如说,如果用户点击了facebook网站中一个带有target=”_blank”属性的链接,那么攻击者就可以利用一个伪造的facebook页面来替换原始的facebook网页,然后要求用户重新输入用户名和密码。这样一来,攻击者便成功获取到了目标用户的凭证数据。

<b>下图演示了 target=”_blank” 攻击的实现过程和效果:</b>

target=”_blank” 有漏洞了 Html打开新窗口也能实施钓鱼攻击

可怕的是,instagram、facebook、以及twitter等大型社交网站都会受到这种攻击的影响。

在上述这三大社交网站中,只有instagram彻底修复了这个问题。而对于twitter而言,只有当用户使用safari浏览器来访问twitter网站时才有可能出现这种问题。但是谷歌却早已公开表示,他们并不关心这个问题…

这也就意味着,修复该问题的重担将落在网站管理员的身上了。实际上,修复该问题最简单的方法就是在网站所有的链接中加入rel=”noopener”属性。对于火狐浏览器而言,由于它并不完全支持该属性,所以开发人员应该使用rel=”noopenernoreferrer”属性作为代替。

请记住,当你每次使用window.open()接口来打开一个新的网页窗口时,你的安全性很有可能会受到这一api的影响,所以别忘了重置“opener”属性。

<code>var newwnd = window.open();</code> <code>newwnd.opener = null;</code>

我个人认为twitter解决这一问题的方法应该是最有效的。twitter的开发人员使用了一个脚本来自动向网站中的链接添加该属性。而安全研究人员也表示,攻击者之所以仍然能够通过safari浏览器来利用twitter的这一漏洞,很有可能是因为他们所用的脚本中存在问题。

那么为什么国外早年的网站设计师要给用户养成默认在页面内打开链接的习惯呢?或者说为什么他们认为在页面内打开是更正确更值得引导的方式呢?他们也是有所的思考的的,

知乎上 @六子6zi 是这么说的

用户将无法控制它在本页打开还是新窗口打开。这是不尊重用户的选择。

新窗口打开使任务栏更加地拥挤。

新窗口打开增加浏览器资源的消耗。

新窗口打开是后退按钮变得不可用。

用户更加期望新页面在当页载入。

原文发布时间:2017年3月24日

本文由:freebuf 发布,版权归属于原作者

原文链接:http://toutiao.secjia.com/target_blank-vulnerability

本文来自云栖社区合作伙伴安全加,了解相关信息可以关注安全加网站

继续阅读