Web安全系列 -- XSS漏洞
字数 1649 2025-08-29 08:31:53
XSS漏洞详解与防御指南
一、XSS漏洞概述
XSS(Cross-Site Scripting)跨站脚本漏洞是Web安全领域中最常见且危害巨大的前端漏洞之一。随着WEB应用日益复杂,XSS漏洞的威胁也越发严重。
XSS漏洞分类
-
非持久型XSS攻击(反射型):
- 一次性攻击,仅对当次页面访问产生影响
- 要求用户访问被篡改后的链接
- 攻击脚本在用户浏览器执行
-
持久型XSS攻击(存储型):
- 攻击数据存储在服务器端
- 攻击行为长期存在
- 影响所有访问受影响页面的用户
-
DOM型XSS:
- 不经过后端处理
- 基于文档对象模型(DOM)的漏洞
- 通过URL参数控制触发
二、XSS漏洞类型详解
1. 反射型XSS
数据流向:浏览器 → 后端 → 浏览器
示例代码:
<!-- XSS反射演示 -->
<form action="" method="get">
<input type="text" name="xss"/>
<input type="submit" value="test"/>
</form>
<?php
$xss = @$_GET['xss'];
if($xss !== null){
echo $xss;
}
?>
攻击方式:
- 访问
http://localhost/xss.php - 输入
<script>alert('hack')</script> - 点击test按钮
- 输入的JS代码被执行
2. 存储型XSS
数据流向:浏览器 → 后端 → 数据库 → 后端 → 浏览器
示例代码:
<!-- 存储XSS演示 -->
<form action="" method="post">
<input type="text" name="xss"/>
<input type="submit" value="test"/>
</form>
<?php
$xss=@$_POST['xss'];
mysql_connect("localhost","root","123");
mysql_select_db("xss");
if($xss!==null){
$sql="insert into temp(id,payload) values('1','$xss')";
$result=mysql_query($sql);
echo $result;
}
?>
展示页面代码:
<?php
mysql_connect("localhost","root","root");
mysql_select_db("xss");
$sql="select payload from temp where id=1";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
echo $row['payload'];
}
?>
攻击特点:
- 攻击代码存储在数据库中
- 当其他用户访问展示页面时触发
- 危害性大于反射型XSS
3. DOM型XSS
数据流向:URL → 浏览器
示例代码:
<?php
error_reporting(0); //禁用错误报告
$name = $_GET["name"];
?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript">
var text = document.getElementById("text");
var print = document.getElementById("print");
print.innerHTML = text.value; // 获取text的值并输出在print内,导致XSS的主要原因
</script>
攻击特点:
- 完全不经过服务器处理
- 纯粹由前端JavaScript代码引起
- 难以通过传统WAF防护
三、XSS漏洞利用
1. 利用平台
常见XSS利用平台:
- XSS Shell
- BeEF
- Anehta
- CAL9000
- xsser.me
2. 利用步骤(以xsser.me为例)
- 登录平台创建新项目
- 获取攻击代码(如
<script src="..."></script>) - 将代码注入到存在XSS漏洞的页面
- 等待受害者触发,平台接收信息
3. 典型利用方式
- 窃取用户Cookie
- 劫持用户账户
- 执行恶意ActiveX或Flash内容
- 强制下载恶意软件
- 网络钓鱼攻击
- 针对管理员的特权提升攻击
四、XSS漏洞测试方法
1. 工具测试(BruteXSS)
特点:
- 快速暴力注入测试
- 支持自定义Payload库
- 支持GET和POST请求
- 准确率高,误报少
使用步骤:
- 选择请求方法(GET/POST)
- 输入测试URL和参数
- 选择Payload库
- 开始自动化测试
- 分析输出结果
2. 手工测试
测试流程:
- 使用Burp Suite拦截请求
- 修改参数尝试注入
- 分析响应内容
- 根据过滤情况调整Payload
- 尝试绕过防护措施
测试要点:
- 测试各种闭合符号(< > ' "等)
- 尝试编码绕过
- 测试各种事件处理器(onclick, onload等)
- 尝试SVG/HTML5新标签
五、XSS漏洞危害
-
对用户的危害:
- Cookie窃取导致会话劫持
- 敏感信息泄露
- 恶意软件下载
- 键盘记录等隐私侵犯
-
对企业的危害:
- 数据泄露
- 网站篡改
- 声誉损失
- 法律风险
-
典型攻击场景:
- 伪造银行邮件诱导点击恶意链接
- 留言板中植入持久型XSS
- 针对管理员的钓鱼攻击
六、XSS防御措施
-
输入过滤:
- 过滤特殊字符(< > ' "等)
- 使用白名单机制
- 对输入长度进行限制
-
输出编码:
- HTML实体编码
- JavaScript编码
- URL编码
- 根据输出上下文采用适当的编码方式
-
内容安全策略(CSP):
- 限制脚本来源
- 禁止内联脚本
- 报告违规行为
-
HttpOnly Cookie:
- 防止JavaScript读取敏感Cookie
- 缓解会话劫持风险
-
其他措施:
- 使用XSS防护库(如DOMPurify)
- 定期安全测试
- 安全意识培训
七、总结
XSS漏洞是Web安全中最常见且危害巨大的漏洞类型,分为反射型、存储型和DOM型三种。通过本文的详细分析和示例演示,我们可以深入理解XSS漏洞的原理、利用方式和防御措施。在实际开发中,应当采取多层次的安全防护策略,从输入过滤、输出编码到安全策略配置,全面防范XSS攻击。