什么是XSS(跨站脚本攻击)?
跨站脚本攻击,或称XSS,是网站中的一个安全漏洞,允许攻击者向网页添加有害脚本。这些脚本大多数是用JavaScript编写的。
如果有人访问了受XSS影响的页面,他们的浏览器会运行攻击者的脚本。这可能导致Cookie被盗、会话被劫持或未经用户许可的操作。
XSS与SQL注入一样,经常被列入OWASP十大最常见的Web应用程序漏洞之一。

XSS如何工作?
XSS通常针对未正确检查和清理用户输入的Web应用程序。
例如,如果一个评论框允许未经过滤的原始HTML或JavaScript,攻击者可以添加如下代码:
<script>alert('Hacked!');</script>
当受害者查看页面时,恶意代码会在他们的浏览器中运行。
为什么XSS在网络安全中很重要
XSS可能导致更大的安全漏洞:
- 账户接管(窃取会话cookie以冒充用户)
- 数据盗窃(捕获表单输入如密码或信用卡)
- 网络钓鱼攻击(注入假登录表单)
- 恶意软件投放(将用户重定向到恶意网站)
XSS类型
- 基于DOM的XSS
- 攻击完全在浏览器中通过操纵文档对象模型(DOM)进行,而不涉及服务器。
- 存储型XSS
- 恶意脚本永久存储在服务器上,如数据库、个人资料页面。
- 反射型XSS
- 脚本从网络服务器反射(例如,在URL或错误消息中),当受害者点击攻击者精心制作的链接时,脚本将被执行。
如何防止XSS
- 输入清理和输出编码:在处理用户输入数据之前始终进行清理,将用户输入转换为安全格式
- 使用内容安全策略(CSP):限制可以在浏览器中执行的脚本。
- 避免使用eval()和内联JavaScript:以减少注入风险。
- 安全测试(DAST/IAST):运行安全测试以及早检测漏洞
现实世界案例中的示例 - Samy蠕虫(MySpace, 2005)
发生了什么: Samy Kamkar 发布了一个包含 存储型XSS 负载的 MySpace 个人资料。当其他用户查看该个人资料时,负载在他们的浏览器中运行,它 (a) 将 Samy 添加为好友,(b) 在他们的个人资料中附加短语“Samy 是我的英雄”,并且 (c) 将自身复制到这些用户的个人资料页面。
影响: 该蠕虫在大约 20 小时内自我传播到 约 100 万用户,迫使 MySpace 暂时下线。
为什么有效: MySpace 允许在个人资料字段中使用未转义的 HTML/属性,从而在访问者的浏览器中启用存储的脚本执行。
经验/修复: 适当的输出编码、输入清理、移除个人资料字段中的 HTML,以及快速修补。Samy 后来面临法律后果,MySpace 部署了过滤器。
相关术语
- SQL 注入
- DAST(动态应用安全测试)
- OWASP 前 10
- CSRF(跨站请求伪造)