风飞扬  梦起航

风飞扬个人博客——专注Java

target="_blank"的安全缺陷


    最近在多个地方看到有关  target="_blank" 的安全缺陷  文章,下面来简单总结一下。

    可能大家在写网页的时候经常给超链接加个属性 target="_blank",意思就是在浏览器新的窗口打开此超链接,但是大多数人应该都注意不到这个属性是有安全缺陷的。

    具体说明下:比如说,当前网页(即你现在所处的风飞扬博客的页面)中有个a标签的是
1
2
    


    点击后跳转到的新的窗口的网页(在这里是新的风飞扬博客中一个测试页面)拥有了浏览器window.opener对象赋予的对原网页(在这里是你现在所处的页面)的部分权限。

    对于这种正常的情况就不做demo演示了,此处不做特殊处理的话就是点击超链接打开了2个普通的页面罢了。

    但是如果我在新打开的页面上加上一句JavaScript就不一样了, 上代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   <script type="text/javascript">
 
     if(window.opener){
 
          opener.location="https://www.baidu.com/";
 
          alert("刚才的超链接是有安全隐患的!看一下前一个窗口的页面是否发生了改变");
 
      }else{
 
          alert("刚才的超链接是安全的!前一个窗口的页面没有任何变化!");
 
      }
 
   </script>
    

    请点击此超链接测试有安全缺陷的情况:这是测试有安全隐患的超链接

    这个安全隐患就可能被别有用心的人所利用,用户可能很少注意地址栏的变化,这样的话如果做个和正规网站一样的界面可能就很容易以假换真,后果还是比较严重的。

    那么逼逼了半天,该如何解决呢?

    
在target="_blank"后面再添加一个属性 rel="noopener noreferrer"就行了,不用多说,相信明眼人一看就知道这个属性的意图了。如下所示:
1
2
<a href="http://windfly.blogjava.net"  target="_blank" rel="noopener noreferrer"></a>
    

    再次测试一下没有该安全缺陷的情况:这是测试没有该安全隐患的超链接

    总结一下:下次再做开发的时候别怕麻烦最好在target="_blank"后面添加一句 rel="noopener noreferrer"


posted on 2016-08-30 12:53 风飞扬(windfly) 阅读(149) 评论(0)  编辑  收藏 所属分类: 网络安全与测试


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

公告



网名:风飞扬

英文名:windfly

博客:windfly.blogjava.net

个人简介:不讲究 , 不将就

导航

最新评论

风飞扬
  • 首页
  • 未命名
  • 笔记
  • 未命名
  • 笔记
  • 未命名
  • 音乐