一、概述

我们知道,网页里的a标签默认在当前窗口跳转链接地址,如果需要在新窗口打开,需要给 a 标签添加一个target="_blank"属性,这个属性的意思是在新的浏览器窗口打开此超链接,但是这个其实是有安全缺陷的,当我们在这样的写的时候一个非常简单的钓鱼攻击的漏洞就这样产生了。

二、原理

熟悉js的朋友都应该知道当我们在调用window下的open方法创建一个新窗口的同时,我们可以获得一个创建窗口的opener句柄,但你也许没注意到,通过target="_blank"点开的窗口活着标签页,子窗口也能捕获opener句柄,通过这个句柄,子窗口可以访问到父窗口的一些属性,虽然很有限,但是我们却可以修改父窗口的页面地址,让父窗口显示指定的页面。

举个例子,在页面a.html中有这样一段代码:

<a href="b.html" target="_blank">跳转</a>;

当我们点击页面a.html中的跳转链接时,浏览器会在新的窗口或标签页中打开b.html,假如这个时候b.html中有这样一段js代码:

if (window.opener) {window.opener.location.href = 'b.html';}

当页面b.html被打开的同时原来打开a.html的标签页会被重定向到b.html, b.html可以是和原来域完全不相关的其它域的资源。

三、性能

除了安全隐患外,还有可能造成性能问题。通过target="_blank"打开的新 窗口,跟原来的页面窗口共用一个进程。如果这个新页面执行了一大堆性能不好的 JavaScript 代码,占用了大量系统资源,那你原来的页面也会受到池鱼之殃。

四、防范

如果需要限制window.opener的访问行为,我们只需要在原始页面每个使用了 target="_blank" 的链接中加上一个 rel=“noopener” 属性。
但是,火狐并不支持这个属性值,火狐浏览器里需要写成 rel=“noreferrer” ,所以我们可以将两个属性值合并写成 rel=“noopener noreferrer” 来完整覆盖。
这样新窗口的window.openner就是null了,而且会让新窗口运行在独立的进程里,不会拖累原来页面的进程。
当然,我们也可以通过js来控制来限制句柄的访问,代码如下:

var otherWindow = window.open();otherWindow.opener = null;
otherWindow.location = url;
otherWindow.target = "_blank";

五、总结

在开发中,我们以后在写a标签的时候尽量都在target="_blank"后面添加一句 rel=“noopener noreferrer”

前端 - a标签target=”_blank”相关推荐

  1. php target当前页面,href标签target=_blank属性的妙用

    我们都知道 html 超链接标签 href 属性 target="_blank" 的作用是使打开的链接以新开的窗口形式出现.但是除了直接写在 href 标签里面,你还知道有其他更巧 ...

  2. a标签target=”_blank”的安全问题及解决办法

    一.定义 A 标签的 target 属性规定在何处打开链接文档.如果在一个 A 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与这个目标吻合的框架或者 ...

  3. a标签 target = “_blank“ 漏洞方法

    <a href="https://www.csdn.net/" target="_blank" rel="noopener">c ...

  4. HTML 中 a 标签的 target=blank 和 target=_blank 的区别

    前言 去年学前端基础三剑客的时候,知道了超链接既可以在当前页打开,也可以在新标签页中打开,默认情况下,如果不设置 a 标签上 target 属性的值,那么点击超链接时,当前页会被超链接的目标页覆盖掉: ...

  5. Web前端笔记(标签)

    目录 Web前端知识点 HTML 标签的语法 html标签 主体框架 常用标签 标题标签 段落标签 字体倾斜.加粗.下划线 强调内容 预设标签 字体标签 分割线 实体字符 图片标签 视频标签 音频标签 ...

  6. 【转载】target='_blank' 安全漏洞示例

    kayson 2016-08-29 23:09:31 推荐新文章 target='_blank' 安全漏洞示例 原文链接: dev.to 更新: Instagram已经解决了这个问题, 很可能是因为这 ...

  7. [html] 通过设置表单的target=“_blank“来下载文件会被浏览器拦截吗?如何解决?

    [html] 通过设置表单的target="_blank"来下载文件会被浏览器拦截吗?如何解决? 不用表单下载,动态创建一个a标签, 设置href, target="_s ...

  8. 你造吗?这个属性值你写错了多少年?target=“_blank”

    什么是target? 按照国际惯例,这里先介绍一下target的家庭基本情况 1.基本情况 a标签有一个神奇的属性,就是target.这个属性可以规定在什么地方打开链接页面.如果a标签有 这个值,那么 ...

  9. target=_blank和target=_black

    target="_blank" 每次点击一次都打开新的窗口: target="_black" 当新标签已经打开了,点击第二次就不会再打开新标签了,而是刷新之前的 ...

最新文章

  1. ARM处理器的运行模式和ARM寄存器
  2. 哈士奇与阿拉斯加雪橇犬的区别
  3. MFC的固高环形倒立摆GRIP2002实验平台
  4. php中双引号的区别,PHP中单引号和双引号的区别
  5. 修改gitignore 后不起作用
  6. mysql inputoutput_PHP:同时使用INPUT和OUTPUT参数(不“ INOUT”)调用MySQL存储过程
  7. 怎样在半年内把一个团队带垮?
  8. 什么是线程单线程和多线程_什么是多线程?看我多线程七十二变,你能记住吗?...
  9. 外网访问内网Oracle数据库
  10. android背景颜色动态修改,Android自定义TextView带圆角及背景颜色(动态改变圆角背景颜色)...
  11. hadoop集群图解_一个hadoop集群的网络拓补图
  12. Hadoop完全分布式集群安装Hbase
  13. status函数(自学数据结构第一天)
  14. linux下最全的快捷键大全
  15. SegNet 论文解析
  16. 个性化广告推荐系统实战系列(一):任务数据简介和基本流程梳理
  17. 【总结整理】产品经理技术
  18. 可以看游资的app_新游资APP:高评分App是如何养成的?
  19. 4.Cantor表(升级版)
  20. Python机器学习基础

热门文章

  1. Domoticz加入dht11温湿度模块,显示室内温湿度
  2. 2022. 12 青少年软件编程(C 语言) 等级考试试卷(四级)
  3. 研究人员是如何改善微型计算机的,北方高校微机实验室内微环境的研究及改善对策的探讨...
  4. DNS扫盲系列之八:关于域名解析的授权
  5. IDEA光标变成白色粗条的问题解决
  6. IIC(2402)实验
  7. Unity_MegaFiers_Hump
  8. python项目开发实战第2版pdf_《树莓派开发实战++第2版》.pdf
  9. 中文自然语言处理向量合集(字向量,拼音向量,词向量,词性向量,依存关系向量)
  10. VX Search Client 9.7.18 漏洞分析及利用