关于 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
,则此时两个标签页将会互不干扰,使得原页面的性能不会受到新页面的影响。
综上,以后对一个漏洞的修补方法除了要多维度、多层面来制定多种方法外,
还要考虑性能、用户体验等各种影响;
以期安全能更平滑的落地,甚至带来更好的性能等用户体验
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步