当前位置: 首页 > article >正文

XSS攻击 - 不要再硬背了

XSS攻击是所有程序员都知道的一件事,它也是前后端面试的一个常考点。也正如标题所说,很多人在背它,为什么要背它?这点我深有感悟,最近我突破了那个key,所以我想将它分享出来。

XSS攻击,其实都是利用浏览器漏洞来执行恶意脚本,以此来对用户造成伤害的一种攻击种类。有人会思考“浏览器漏洞”?似乎很近又很远。

渲染HTML内容,你说它算是漏洞吗?对攻击者来说它是漏洞,对用户来说它就不是漏洞,如果没有GUI,我们可能还停留在报纸时代。

URL,你说它算是漏洞吗?没有它,我们可能会用专门的一个小本来记录各资源与IP之间的映射关系。所以它对使用者来说就不是漏洞。但是对攻击者来说,它就可以算是一个漏洞,攻击者会千方百计的让你点链接,甚至是自动帮你点链接这都是很可能会存在的事情。

所以上面就是我对“漏洞”的理解,说来也是奇怪,不知道从什么时候开始,我看事物的
方式,都会存在正反的自我博弈。

那么接下来,我将介绍下常见的XSS攻击类型。

存储型攻击

将恶意脚本存储在数据库中,当用户访问该网站时,恶意脚本会被加载和执行,它会对访问该网站的所有用户造成影响。

恶意脚本是如何被加载和执行的呢?从前端的技术层面看,2种方式,一种是服务端渲染,一种前后端分离,并且应用的还是老版本的VUE框架 或者 React框架。

我们知道的案例,网上呼声最高的应该就是“用户的评论”渲染问题。服务端渲染更容易被侵入,下面我们来举个例子:

video文件内容如下:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', (req, res, next) => {
  res.send(`
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>访问视频的页面</title>
      </head>
      <body>
        <div>hello video</div>
        <script>
            alert('这是一个恶意弹窗')
        </script>
      </body>
    </html>
  `);
});

module.exports = router;

express搭建的服务器的首页注册video路由:

var videoRouter = require('./routes/video');

app.use('/video', videoRouter);

当我们尝试访问/video的时候,页面会提示“这是一个恶意弹窗”的弹窗。表示用户被攻击了。

在这里插入图片描述

在前后端分离的项目里,只要是可以渲染html代码的API,存储型的XSS攻击都是可以生效的。

VUE里提供了一个v-html的指令。

React提供了一个dangerouslySetInnerHTML属性可以渲染html。这个属性在最新的
React18版本中被增强了。它默认会对script脚本进行转义。

所以,总结一下存储型XSS的攻击过程:

  • 用户在输入框里输入html代码,前后端都没做转义,所以数据库中存储了字符串类型的js脚本或html代码。
  • 如果是服务端渲染,前端拿到最新的数据(可能是字符串化的js脚本或html代码),因为前后端都没判断数据的合法性,所以前端将它拼接到html文件中,浏览器收到响应后,直接渲染页面,造成用户被攻击。
  • 如果是前后端分离的项目了,前端使用了可以渲染html代码的方法,直接将数据渲染到页面上,导致页面渲染失败,攻击生效。

反射型攻击

它的攻击方式分为2类:

一类是攻击者将恶意脚本注入到URL参数中,通过各种手段诱导用户点击链接,当用户访问他们的链接时,恶意脚本也就被执行了

一类是如果页面中,有一些内容是直接渲染URL的参数,并且此时渲染的方法是v-html这类的API,那么恶意脚本也会被执行

这里有小伙伴会问,我即使点击了链接,对用户有什么影响?那小编就来细细的说一下。

  • 攻击者可以利用恶意的URL,跳转到第三方网站。比如跳转到各种病毒网站。
  • 攻击者可以构造出参数为恶意的script脚本的URL,当用户访问时,就会被攻击。比如,script脚本里有清空body元素的代码,这会让网站白屏。
  • 如果某些银行公司的开发直接将用户的信息以明文的方式存储在localStorage、cookie中,那么,攻击者就可以通过通过script脚本获取到用户的信息,比如:姓名、手机号、登录凭证等。

DOM型攻击

攻击者通过script脚本修改页面的DOM信息,来对用户实施攻击。比如修改所有超链接的地址,清空body元素等。

最后

其实XSS攻击本质就是将恶意代码注入到html文档中,以此来实现攻击。只不过根据恶意脚本的注入方式的不同,将它分为了以下有代表性的几类:

  • 存储型攻击
  • 反射型攻击
  • DOM型攻击

存储型攻击,恶意脚本从数据库中获取。

反射型攻击,恶意脚本从URL的参数中获取。

DOM型攻击,只要网站的html结构发生变化,都可以被视为DOM型攻击。

其实我个人认为,XSS攻击就不应该再继续往下分类了,因为它都是利用恶意脚本来实现的攻击,这个可能就是“卷”吧。

那么本期内容到这里就结束啦,如果上述内容有不对的地方,欢迎小伙伴留言指出,那么我们下期再见啦~~


http://www.kler.cn/a/231876.html

相关文章:

  • ubuntu 安装kafka-eagle
  • 跨域 总 结 CORS
  • uniapp vue3的下拉刷新和上拉加载
  • 【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练
  • 【图像压缩感知】论文阅读:Content-Aware Scalable Deep Compressed Sensing
  • SpringSecurity 鉴权认证入门讲解
  • svg基础(五)滤镜-高斯模糊,混合模式,偏移,颜色变换
  • [C/C++] -- JSON for Modern C++
  • Centos 内存和硬盘占用情况以及top作用
  • JVM 性能调优 - 参数基础(2)
  • Java实现批量视频抽帧2.0
  • 前端架构: 脚手架的开发流程和常用框架
  • 基于“python+”潮汐、风驱动循环、风暴潮等海洋水动力模拟实践技术
  • macOS系统下彻底删除应用程序和其数据、配置等
  • 《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)
  • Python进阶----在线翻译器(Python3的百度翻译爬虫)
  • get通过发送Body传参-工具类
  • Go 语言中如何大小端字节序?int 转 byte 是如何进行的?
  • 小白水平理解面试经典题目LeetCode 21. Merge Two Sorted Lists【Linked List类】
  • 【Web - 框架 - Vue】随笔 - 通过`CDN`的方式使用`VUE 2.0`和`Element UI`
  • CDN相关和HTTP代理
  • nodejs将console.log保存到log.txt文档中(electron工具)
  • 图像处理入门:OpenCV的基础用法解析
  • 09 AB 10串口通信发送原理
  • SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式 基础(持续更新~)
  • PdfFactory Pro软件下载以及序列号注册码生成器