什么是 XSS(跨站脚本攻击)?
跨站脚本攻击,或称 XSS,是网站中的一个安全漏洞,允许攻击者向网页添加有害脚本。这些脚本大多数是用 JavaScript 编写的。
如果有人访问了受 XSS 影响的页面,他们的浏览器会运行攻击者的脚本。这可能导致 cookie 被盗、会话被劫持或在未经用户许可的情况下执行操作。
XSS 像 SQL 注入一样,常常被列入 OWASP 前 10 名中,作为最常见的 Web 应用程序漏洞之一。
XSS 如何工作?
XSS 通常针对未正确检查和清理用户输入的 Web 应用程序。
例如,如果评论框允许原始 HTML 或 JavaScript 而没有任何过滤,攻击者可以添加如下代码:
<script>alert('被黑了!');</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 Top 10
- CSRF(跨站请求伪造)