target="_blank" 安全漏洞

在HTML中使用target='_blank'打开新窗口存在安全风险,恶意网页可通过window.opener访问并操控原窗口。本文解析此漏洞原理,演示如何利用及防范,推荐使用rel='noopener'增强安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作中,经常在<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";

 

解读代码<html> <head lang="en"> <meta charset="UTF-8"> <meta name="Robots" content="all"> <meta name="viewport" content="width=device-width,intial-scale=0,maximum-scale=0,user-scalable=yes,shrink-to-fit=no"> <meta http-equiv="X-UA-Compatible" content="IE=Edge, chrome=1"> <meta name="referrer" content="unsafe-url"> <meta name="renderer" content="webkit"> <meta name="description" content=""> <meta name="keywords" content=""> <title></title> <base target="_blank"> <link href="css/animate.css" rel="stylesheet"> <link rel="stylesheet" href="css/reset-pc.css"> <link rel="stylesheet" href="css/animate.css"> <link rel="stylesheet" href="css/index.css?202310141454"> <script src="js/jquery.1.12.4.min.js"></script> <script src="js/swiper-bundle.min.js?v=202104131601"></script> <script src="js/public.js?v=202104131601"></script> <html> <head lang="en"> <meta charset="UTF-8"> <meta name="Robots" content="all"> <meta name="viewport" content="width=device-width,intial-scale=0,maximum-scale=0,user-scalable=yes,shrink-to-fit=no"> <meta http-equiv="X-UA-Compatible" content="IE=Edge, chrome=1"> <meta name="referrer" content="unsafe-url"> <meta name="renderer" content="webkit"> <meta name="description" content=""> <meta name="keywords" content=""> <title></title> <base target="_blank"> <link href="css/animate.css" rel="stylesheet"> <link rel="stylesheet" href="css/reset-pc.css"> <link rel="stylesheet" href="css/animate.css"> <link rel="stylesheet" href="css/index.css?202310141454"> <script src="js/jquery.1.12.4.min.js"></script> <script src="js/swiper-bundle.min.js?v=202104131601"></script> <script src="js/public.js?v=202104131601"></script>
最新发布
03-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值