🔍 什么是XSS漏洞?

跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web安全漏洞, 攻击者通过在网页中注入恶意脚本代码,当其他用户浏览该网页时, 注入的恶意代码会在用户浏览器中执行,从而窃取用户信息、劫持用户会话或进行其他恶意操作。

⚠️ 为什么叫XSS而不是CSS?
为了避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆, 跨站脚本攻击缩写为XSS。

📋 XSS的三种主要类型

反射型XSS (Reflected XSS)

反射型XSS是最常见的XSS类型。攻击代码通过URL参数或表单提交传递给服务器, 服务器将恶意代码直接反射回浏览器并执行。这种攻击通常需要诱导用户点击特制的恶意链接。

典型场景:

搜索功能、错误提示页面、URL参数回显

// 漏洞代码示例 <div>搜索结果:<?php echo $_GET['keyword']; ?></div> // 攻击URL http://example.com/search?keyword=<script>alert('XSS')</script>

存储型XSS (Stored XSS)

存储型XSS是危害最大的XSS类型。攻击代码被永久存储在服务器端(如数据库、文件系统), 当其他用户访问包含恶意代码的页面时,代码会自动执行。这种攻击影响范围广,持续时间长。

典型场景:

留言板、评论系统、用户资料、文章内容

// 漏洞代码示例 <div class="comment"> <?php echo $comment['content']; ?> </div> // 攻击payload存储在数据库 INSERT INTO comments (content) VALUES ('<img src=x onerror=alert(1)>');

DOM型XSS (DOM-based XSS)

DOM型XSS是一种特殊的XSS类型,攻击代码不经过服务器, 完全在客户端通过JavaScript操作DOM时触发。这种攻击难以被传统的服务器端防护措施检测。

典型场景:

前端路由、动态内容渲染、URL片段处理

// 漏洞代码示例 <script> var keyword = location.search.substring(1); document.getElementById('result').innerHTML = keyword; </script> // 攻击URL http://example.com/#<img src=x onerror=alert(1)>

⚡ XSS漏洞的危害

🛡️ XSS防御措施

1. 输入验证和过滤

2. 输出编码

// PHP示例 echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8'); // JavaScript示例 function escapeHtml(text) { return text.replace(/[<>"'&]/g, function(m) { return {'<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;','&':'&amp;'}[m]; }); }

3. 使用安全的API

4. Content Security Policy (CSP)

通过HTTP头部设置CSP策略,限制页面可以加载和执行的资源:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'

5. HttpOnly Cookie

设置Cookie的HttpOnly标志,防止JavaScript访问Cookie:

Set-Cookie: sessionid=xxx; HttpOnly; Secure; SameSite=Strict

🎯 开始实战练习

现在你已经了解了XSS漏洞的基本原理和防御方法, 是时候通过实战练习来提升你的安全测试技能了!

我们为你准备了9个不同难度的XSS挑战关卡, 从简单的无过滤注入到复杂的WAF绕过, 每个关卡都会让你学到新的攻击技巧和绕过方法。

🚀 开始挑战
⚠️ 安全声明
本靶场仅用于安全学习和测试目的。请勿将所学技术用于攻击真实网站或进行任何非法活动。 作为安全研究者,我们应该遵守法律法规,负责任地使用安全知识。