asp.net web开发框架,asp.net web submit链接页面_41. Web 安全之 target=quot;_blankquot; 触发钓鱼风

 2023-09-21 阅读 20 评论 0

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

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

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

原理

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

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

举个栗子

asp.net web开发框架?假如在页面 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>

效果如下图所示:

js获取当前网址,261b6f842f57feab0b3ebe5bf44f6c39.gif

隐患

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

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

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

防范

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

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

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

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

d0fc4544d3298706b3d45fc3c83bf2d4.png

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

0d968a97aafdd1c40cca19a84e5c91cd.png

可以合并这两种写法

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

js路由跳转。但需要注意的是,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 句柄了。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/81601.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息