关于 target="_blank"漏洞的分析

关于 target="_blank"漏洞的分析 

一、漏洞详情:
首先攻击者能够将链接(指向攻击者自己控制的页面的,该被控页面的js脚本可以对母页面进行部分权限操控,如跳转:opener.location)存储在应用上,并展现给受害者,诱导受害者点击,才能继续后续攻击;
漏洞根源:浏览器支持该功能; 

二、防御方法:  有两种方法:      

1、在用户输入链接的文本编辑器内和跳转链接时,将链接内容自动添加 rel=noopener特性(该特性不同浏览器支持情况不同,可以对不同浏览器添加不同的特性,如火狐还需添加 noreferrer特性;在一些老浏览器里面不支持这个属性,就可以通过js 手动设置 opener 为 null 来解决:

var newWnd = window.open();
newWnd.opener = null;
newWnd.location = url;

2、在处理点击链接时,不在新窗口打开,而是在老窗口刷新(a标签不加target="_blank"  ;但该方法可能和国内用户使用习惯有冲突) 另,该漏洞属于浏览器漏洞,彻底杜绝的方法只能是浏览器不支持该特性;以上方法只是减少我们应用带给用户的风险,但如果其他应用存在该问题,用户依然会遭到钓鱼攻击,从而泄漏用户的各种信息;我们查看了百度、阿里等现有应用,均存在此问题;综上,个人觉得该漏洞的修复需求对我们并不高;

-------------------------------分割线-----------------------------------

今天看到知道创宇前端公众号有关于这个漏洞的分析

再拿出来对比一下。

1、发现提供了一个之前未记录的方法:

修改http response header来弥补

在 HTTP 的响应头中增加 ReferrerPolicy 头来保证来源隐私安全。

ReferrerPolicy 需要修改后端代码来实现

其它解决办法都是一样,noopener及noreferrer

2、对SEO的考虑

当然,在跳转到第三方网站的时候,为了 SEO 权重,还建议带上 rel="nofollow",所以最终类似于这样:

<a
 
href
=
"https://an.evil.site"
 
target
=
"_blank"
 
rel
=
"noopener noreferrer nofollow"
>
进入一个“邪恶”的网站
</a>

 

 

3、性能影响

性能

最后,再来说说性能问题。

如果网站使用了 <atarget="_blank">,那么新打开的标签页的性能将会影响到当前页面。此时如果新打开的页面中执行了一个非常庞大的 JavaScript 脚本,那么原始标签页也会受到影响,会出现卡顿的现象(当然不至于卡死)。

而如果在链接中加入了 noopener,则此时两个标签页将会互不干扰,使得原页面的性能不会受到新页面的影响。

 

综上,以后对一个漏洞的修补方法除了要多维度、多层面来制定多种方法外,

还要考虑性能、用户体验等各种影响;

以期安全能更平滑的落地,甚至带来更好的性能等用户体验

posted @ 2018-03-07 11:14  指尖的乐律  阅读(867)  评论(0编辑  收藏  举报