在网页中使用链接时,如果想要在新的标签页打开指定的地址,通常的做法就是在 标签上添加 target="_blank" 属性,然而,就是这个属性,为钓鱼攻击者带来了可乘之机。

本文来聊聊 target="_blank" 会引发钓鱼风险的原理,以及如何防范此类钓鱼攻击。

原理

我们知道,当在 JavaScript 中调用 window 对象的 open() 方法打开一个新窗口时,可以获得一个创建窗口的 opener 句柄,但你也许没有注意到,当使用 超级链接标签时,如果使用 target="_blank" 在新窗口或标签页中打开资源,子窗口也能捕获到 opener 句柄。

通过 opener 句柄,在子窗口中可以访问到父窗口的一些属性,比如可以修改父窗口的地址信息,让父窗口跳转到指定的页面,虽然所能访问到的属性有限,却为有心人带来可乘之机,利用其实现钓鱼攻击。

举个栗子

假如在页面 a.html 中布局如下:

<form action="/login" method="post">  <div><input type="text" placeholder="用户名" />div>  <div><input type="password" placeholder="密码" />div>  <div><input type="submit" value="登录" />div>form><a href="/b.html" target="_blank">跳转到b.html页面a>

页面中有一个链接,点击后打开新标签页并跳转到 b.html 页面,b.html 页面代码片段如下:

<div>切换到前一页面看看效果div><script>  if (window.opener) {    window.opener.location = '/c.html'  }script>

在页面 b.html 被打开时, 中脚本被执行,原来打开的 a.html 标签页会被重定向到 c.htmlc.html 可以是和原来域相同或完全不相关的其它域的资源。

c.html 中伪装 a.html 页面中的表单:

<form action="/another_login.do" method="post">  <div><input type="text" placeholder="用户名" />div>  <div><input type="password" placeholder="密码" />div>  <div><input type="submit" value="登录" />div>form><b>这是钓鱼伪装的页面b>

效果如下图所示:

隐患

既然可以通过打开的子窗口获得 opener 句柄来修改父窗口的 location,让父窗口跳转到指定的页面,那么钓鱼网站就可以利用这个“漏洞”来实现钓鱼攻击:

  1. 攻击者在论坛发布帖子或回复帖子,其中带有外链,并诱导用户点击链接
  2. 某访问者点击了这个外链,打开新窗口或标签页
  3. 切换回原来的站点时,它已经被换成了一个跟原站点界面一模一样的钓鱼网站,并且这个钓鱼网站提示你登录信息已过期,需要重新输入用户名和密码
  4. 访问者认为真的是登录信息过期了,重新输入了用户名与密码
  5. 钓鱼网站得到用户名和密码,重定向到真正的网站,由于真正网站的 cookieweb storage 等信息还在(保存了用户登录信息),所以也直接就登录进去了
  6. 访问者认为正常登录成功,但事实上,账号信息已经不知不觉被盗了

当然这个攻击也有破绽,比如钓鱼网站和真实网站的域名会不一样,但通常访问者在浏览网站时,不会去观察网站的域名,而且很多钓鱼网站会让域名跟真实网站的域名非常相似以混淆视听,比如 example.comexamp1e.com,不仔细分辨还真以为是同一个呢。

防范

由于可以使用 标签打开新窗口,也可以使用 window.open() 来打开新窗口,所以防范处理如下:

针对 标签 target="_blank" 的防范

可以在所有使用了 target="_blank" 的链接上添加 rel="noopener noreferrer" 属性来防范钓鱼攻击

某些旧版本 FirefoxEdgeIE 并不支持 rel="noopener" 的使用:

为了兼容老版本浏览器,可以使用 rel="noreferrer" 来防范:

可以合并这两种写法

<a href="/b.html" target="_blank" rel="noopener noreferrer">  跳转到b.html页面a>

但需要注意的是,IE11 之前的浏览器仍不支持使用这种使用,如果需要兼容老版本的 IE,可参考 http://danielstjules.github.io/blankshield,但通常默认情况下,IE 不会受到攻击。

针对 window.open() 方法的防范

可以利用 JavaScript 中的 window.open() 来实现防范:

<a  href="/b.html"  target="_blank"  onclick="    var otherWindow = window.open();     otherWindow.opener = null;     otherWindow.location = href;     return false;  ">  跳转到b.html页面a>

换种写法:

<a href="/b.html" target="_blank" class="link">  跳转到b.html页面a><script>  const link = document.querySelector('.link')  link.addEventListener('click', (e) => {    e.preventDefault()    const otherWindow = window.open()    otherWindow.opener = null    otherWindow.location = e.target.href  }, false)script>

这样在子窗口中就无法获取父窗口的 opener 句柄了。

asp.net web submit链接页面_41. Web 安全之 target=quot;_blankquot; 触发钓鱼风险相关推荐

  1. asp.net web submit链接页面_De1CTF2020的Web部分题解

    前言 题目质量很好,虽然很难但是学到不少东西! 0x01 check in 打开题目页面如下: 题目是一个文件上传挑战,于是先上传一个.php后缀的文件先式式,不出意料失败,那么我们就上传一张.jpg ...

  2. 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(2):处理异步调用中的异常...

    本文来自<ASP.NET AJAX程序设计 第II卷:客户端Microsoft AJAX Library相关>的第三章<异步调用Web Service和页面中的类方法>,请同时 ...

  3. 将WebApiTestClient添加到ASP.NET Web API帮助页面

    ASP.NET Web API帮助页面是一种有用的扩展,可为您的Web API自动生成基于Web的文档.它使调试变得更容易,因为您可以将帮助页面中的信息复制/粘贴到Fiddler等工具中,以调用Web ...

  4. 会所网站php源代码,anmo 按摩休闲会所网站模板,全套 包含近20个HTML 页面,web制作源码。 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...

    文件名称: anmo下载 收藏√  [ 5  4  3  2  1 ] 开发工具: HTML 文件大小: 4797 KB 上传时间: 2013-12-27 下载次数: 5 提 供 者: 烟鸭掌儿 详细 ...

  5. ASP.NET 4 和 Visual Studio 2010 Web 开发概述

    声明:本文是ASP.NET 白皮书 ASP.NET 4 and Visual Studio 2010 Web Development Overview 的阅读摘要,只是本人的学习记录,并非完整翻译,仅 ...

  6. 在ASP.NET Core 2.0中创建Web API

    目录 介绍 先决条件 软件 技能 使用代码 第01步 - 创建项目 第02步 - 安装Nuget包 步骤03 - 添加模型 步骤04 - 添加控制器 步骤05 - 设置依赖注入 步骤06 - 运行We ...

  7. ASP.NET 2.0 Web Part编程之定制Web Part

    如今,软件开发正由OO时代进入到"面向组件的开发"时代.Visual Basic和ASP.NET这样一些编程工具之所以越来越流行,其主要原因在于:使用可视化方式描述对象更贴近自然, ...

  8. http如何远程调用html页面,【Web】写个HTML页面去调试HTTP接口方便些

    现在越来越多的系统基本SOA的思想,业务由许多小系统通过远程调用的方式串连起来,其中HTTP的接口在远程调用的方式中颇为常见. 看过一些开发人员写完一些接口后,要么按照正常情况调用几次就交给调用方,要 ...

  9. web developer tips (8):创建web用户控件并包含在web页面里

    原文地址: How to create an ASP.NET Web User Control and include it in your web page 使用Visual Web Develop ...

最新文章

  1. 2022-2028中国工作服市场现状及未来发展趋势
  2. oracle 11g安装卸载,安装及卸载oracle 11g步骤
  3. 大数据营销的7个雷区,千万别中招
  4. boost::reverse_copy相关的测试程序
  5. 女生适不适学习Java编程
  6. latex中怎样写上标_LaTex:参考文献引用的方法
  7. Java EE 6测试第I部分– EJB 3.1可嵌入API
  8. 服务器测试网址填写注意事项
  9. ansible最大并发_通过这7种方法来最大程度地提高Ansible技能
  10. Jetson tk1 刷机教程
  11. 想知道ios系统还有哪些比较好用的思维导图软件?
  12. python绘制聚类分析树状图
  13. 现代信息系统主要是基于计算机的,科学网—管理信息系统建设导论 - 张利华的博文...
  14. 如何获取淘宝/天猫商品历史价格信息的API接口
  15. 杂记:Atmel sama5d3 DMA Controller (DMAC)
  16. 深度学习 (一)计算机如何处理和识别图片揭秘
  17. 小学生的搞笑考试卷子
  18. 万字长文,带你入门异步编程
  19. 打印一本400页的书多少钱?哪里打印书本比较便宜
  20. VC6 限定鼠标移动范围

热门文章

  1. 将SublimeText加入右键菜单
  2. python3 协程 写法_理解Python的协程(Coroutine)
  3. 语言孪生素数问题_刘建亚教授讲述“素数的故事”
  4. mysql varchar,bigint,char三种类型性能的比较
  5. emacs 替换模式_如何使用Emacs Org模式撰写博客
  6. linux 文件管理器_8个Linux文件管理器尝试
  7. Bootstrap 进度条
  8. CSS 单词间距 word-spacing属性
  9. px4代码解析(3)
  10. 深度学习笔记(25) 池化层