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.mzph.cn/news/674621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字节3面真题,LeetCode上hard难度,极具启发性题解

文章目录 &#x1f680;前言&#x1f680;LeetCode&#xff1a;41. 缺失的第一个正整数&#x1f680;思路&#x1f680;整个代码思路串一下&#x1f680;Code &#x1f680;前言 铁子们好啊&#xff01;阿辉来讲道题&#xff0c;这道题据说是23年字节3面真题&#xff0c;LeetC…

RabbitMQ-3.发送者的可靠性

发送者的可靠性 3.发送者的可靠性3.1.生产者重试机制3.2.生产者确认机制3.3.实现生产者确认3.3.1.开启生产者确认3.3.2.定义ReturnCallback3.3.3.定义ConfirmCallback 3.发送者的可靠性 首先&#xff0c;我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#…

【状态管理一】概览:状态使用、状态分类、状态具体使用

文章目录 一. 状态使用概览二. 状态的数据类型1. 算子层面2. 接口层面2.1. UML与所有状态类型介绍2.2. 内部状态&#xff1a;InternalKvState 将知识与实际的应用场景、设计背景关联起来&#xff0c;这是学以致用、刨根问底知识的一种直接方式。 本文介绍 状态数据管理&#x…

pytorch入门第一天

今天作为入门pytorch的第一天。打算记录每天学习pytorch的一些理解和笔记&#xff0c;以用来后面回顾。当然如果能帮到和我一样的初学者&#xff0c;那也是不胜荣幸。作为一名初学者&#xff0c;难免有些地方会现错误&#xff0c;欢迎各位大佬指出 预备知识 这里主要介绍pyto…

【数据结构】堆(创建,调整,插入,删除,运用)

目录 堆的概念&#xff1a; 堆的性质&#xff1a; 堆的存储方式&#xff1a; 堆的创建 &#xff1a; 堆的调整&#xff1a; 向下调整&#xff1a; 向上调整&#xff1a; 堆的创建&#xff1a; 建堆的时间复杂度&#xff1a; 向下调整&#xff1a; 向上调整&#xff…

2023年06月CCF-GESP编程能力等级认证C++编程二级真题解析

一、单选题(每题2分,共30分) 第1题 高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。 A. 编辑 B. 保存 C. 调试 D. 编译 答案:D 第2题 能够实现下面流程图功能的伪代码是( )。 A. if 条件判断 then 语句块 B. if 条件判断 then 什么…

vue项目打包部署到flask等后端服务里面,实现前后端不分离部署,解决空白页面和刷新页面not fount问题

1. 编译模式一定要设置为esnext&#xff0c;否则会报错&#xff1a; Strict MIME type checking is enforced for module scripts per HTML spec.Expected a JavaScript module script but the server responded with a MIME type of "text/plain". 具体解释可以看vi…

Leetcode 第 382 场周赛题解

Leetcode 第 382 场周赛题解 Leetcode 第 382 场周赛题解题目1&#xff1a;3019. 按键变更的次数思路代码复杂度分析 题目2&#xff1a;3020. 子集中元素的最大数量思路代码复杂度分析 题目3&#xff1a;3021. Alice 和 Bob 玩鲜花游戏思路代码复杂度分析 题目4&#xff1a;302…

停车场|基于Springboot的停车场管理系统设计与实现(源码+数据库+文档)

停车场管理系统目录 目录 基于Springboot的停车场管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能实现 &#xff08;1&#xff09;车位管理 &#xff08;2&#xff09;车位预订管理 &#xff08;3&#xff09;公告管理 &#xff08;4&#…

Vulnhub-Empire靶机-详细打靶流程

渗透思路 1.确认靶机IP地址2.端口服务扫描3.敏感目录扫描4.ffuf命令在这个目录下&#xff0c;继续使用ffuf工具扫描 5.ssh私钥爆破1.将私钥写进sh.txt中2.将私钥转换为可以被john爆破的形式3.通过John爆破 6.ssh私钥登陆7.icex64提权8.arsene提权 1.确认靶机IP地址 ┌──(roo…

浏览器F12调试

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

Tomcat之虚拟主机

1.创建存放网页的目录 mkdir -p /web/{a,b} 2.添加jsp文件 vi /web/a/index.jsp <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <html> <head><title>JSP a page</title> </head> …

PAT-Apat甲级题1009(python和c++实现)

PTA | 1009 Product of Polynomials 1009 Product of Polynomials 作者 CHEN, Yue 单位 浙江大学 This time, you are supposed to find AB where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lin…

Matplotlib绘制炫酷散点图:从二维到三维,再到散点图矩阵的完整指南与实战【第58篇—python:Matplotlib绘制炫酷散点图】

文章目录 Matplotlib绘制炫酷散点图&#xff1a;二维、三维和散点图矩阵的参数说明与实战引言二维散点图三维散点图散点图矩阵二维散点图进阶&#xff1a;辅助线、注释和子图三维散点图进阶&#xff1a;动画效果和交互性散点图矩阵进阶&#xff1a;调整样式和添加密度图总结与展…

stable_diffusion提示词编写笔记(1)

stable_diffusion提示词编写笔记(1) start 总结一下AI绘画学到的知识。 一.提示词分两种&#xff1a; 1.正向提示词&#xff1b; 2.反向提示词&#xff1b; 一个对应你希望图形包含的内容提示词&#xff0c;一个对应你不希望图形出现的内容提示词。 二.如何书写提示词 1.内…

记一次VulnStack渗透

信息收集 netdiscover的主机发现部分不再详解&#xff0c;通过访问端口得知20001-2003端口都为web端口&#xff0c;所以优先考虑从此方向下手 外网渗透 GetShell Struct漏洞 访问2001端口后&#xff0c;插件Wappalyzer爬取得知这是一个基于Struct的web站点&#xff0c;直接…

gtkmm4 应用程序使用 CSS 样式

文章目录 前言css选择器css文件示例源代码效果 前言 程序样式和代码逻辑分离开 使代码逻辑更可观 css选择器 Cambalache提供了两种css-classes 相当于css里的类名:class“类名”css-name 相当于css里的标签名:spin div p 啥的 如上我设置了这个按钮控件的类名为testButton 标…

【Java】万万没想到,又被问ThreadLocal了

我待ThreadLocal如初恋&#xff0c;ThreadLocal虐我千百遍。但这一次&#xff0c;要彻底搞懂ThreadLocal 回顾一下面试名场面&#xff1a; 面试官&#xff1a;Handler如何做到与线程绑定的&#xff1f; 我&#xff1a;每个Handler只有一个相关联的Looper&#xff0c;线程绑定…

如何开始深度学习,从实践开始

将“如何开始深度学习”这个问题喂给ChatGPT和文心一言&#xff0c;会给出很有专业水准的答案&#xff0c;比如&#xff1a; 要开始深度学习&#xff0c;你可以遵循以下步骤&#xff1a; 学习Python编程语言的基础知识&#xff0c;因为它在深度学习框架中经常被使用。 熟悉线性…

自然人如何代开发票

1&#xff1a;登录国家税务总局深圳市电子税务局 地址&#xff1a;国家税务总局深圳市电子税务局 2&#xff1a;个人所得税APP 扫描登录 或 身份证登录 3&#xff1a;选择 自然人代开增值税电子普通发票 4&#xff1a;申请代开 5&#xff1a;人脸识别 6&#xff1a;画框的…