target="_blank" 安全漏洞

工作中,经常在<a>标签中添加target="_blank",用来在新窗口打开页面,尤其是打开外链应用率几乎是100%。可是最近看到这竟然有一个巨大的安全隐患:

比如在index.html中跳转到index2.html

<a href="index2.html" target="_blank">link</a>

在index2.html中添加一段js代码

<script type="text/javascript">
	window.opener.location.href ="http://www.baidu.com"
</script>

此时会发现,index.html已经跳转的百度了。原因是:当站点在链接中使用target="_blank"来打开新标签页或窗口时,该站点就通过window.opener API给了新页面对原有窗口的访问入口,并授予了一些权限。这其中的一些权限被跨域限制拦截了,但是window.location是漏网之鱼。如果,上述链接是钓鱼网站,那就非常可怕了!

这个问题的解决方法就是:在使用target="_blank"时,加上rel="noopener",此时window.opener 已经被置为了 null。

有资料说:rel="noopener"不支持火狐浏览器,需要加上rel="norefferrer",可是我测试是支持的。又有说法是rel="norefferrer"是为了支持旧的浏览器,但我用的IE8,不论是rel="noopener"还是rel="norefferrer"都没有效果,这让我好尴尬……还有,我测试的:不论是谷歌浏览器还是火狐浏览器,既支持rel="noopener"也支持rel="norefferrer"。(低版本浏览器应该是指谷歌低版本,这个安全漏洞在IE浏览器该如何解决呢?)

在使用window.open()也会出现同样的安全漏洞,此需要用js将opener置为null。

var newOpen = window.open();
newOpen.opener = null;
newOpen.location = "http://www.baidu.com";

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值