什么是跨站脚本 (XSS) 攻击?
什么是跨站脚本?
跨站脚本 (XSS) 是一种将恶意代码插入合法网站的技术,目的是出于恶意目的捕获用户信息。
攻击者试图通过在真实的网页或 Web 应用程序中插入恶意代码,在受害者的 Web 浏览器上执行有害脚本。
当受害者访问包含恶意代码的网站或使用 Web 应用程序时,就会发生真正的攻击。恶意脚本通过网页或应用程序传递到用户的浏览器。
论坛、留言板和具有评论功能的在线页面是跨站脚本攻击的典型目标。
当网页或 Web 应用程序生成包含未经清理的用户输入的输出时,就会被称为 XSS。此用户输入必须由受害者的浏览器进行解析。
XSS 攻击可以在 VBScript、ActiveX、Flash 甚至 CSS 中执行。但是,它们在 JavaScript 中最为普遍,因为 JavaScript 对大多数浏览器体验至关重要。
如果攻击者可以利用网页上的 XSS 漏洞在用户的浏览器中运行任意 JavaScript,则该易受攻击的网站或在线应用程序以及其用户的安全性就会受到损害。
跨站脚本可用于篡改网站。攻击者可以使用注入的脚本更改网站内容,甚至将浏览器重定向到另一个网站,例如包含恶意代码的网站。
跨站脚本 (XSS) 攻击的类型
XSS 攻击有多种形式。它们被归类为以下类别:
持久性 XSS
这种类型的漏洞,也称为存储型 XSS,发生在目标服务器上存储了不可信或未经验证的用户输入时。留言板、评论部分和访客日志都是持久性 XSS 的常见目标——任何其他用户(已认证和未认证)都能看到攻击者恶意文本的功能。
持久性 XSS 的一个很好的示例是公开可用的个人资料页面,例如在社交媒体网站和会员组中看到的那些页面。当其他用户查看个人资料时,他们的浏览器会自动执行攻击者在个人资料框中输入的代码。
反射型 XSS
另一方面,反射型或非持久性跨站脚本涉及用户输入的立即返回。攻击者必须诱使用户将数据传输到目标站点才能利用反射型 XSS,这通常是通过欺骗用户点击恶意设计的链接来完成的。
反射型 XSS 攻击通常依赖于包含已截断或以其他方式隐藏的 URL 的网络钓鱼电子邮件,然后再将其传输到目标用户。当受害者点击链接时,脚本就会在受害者的浏览器中运行。
反射型 XSS 通常针对搜索结果和错误消息站点。它们通常在响应中发送未经修改的用户输入,而没有适当地转义数据,以便可以在浏览器中安全地显示。
基于 DOM 的 XSS
基于 DOM 的跨站脚本(也称为客户端 XSS)类似于反射型 XSS,因为它通常通过包含有害脚本的恶意 URL 提供。攻击完全在浏览器中执行,而不是通过更改 DOM(文档对象模型)将有效负载包含在受信任站点的 HTTP 响应中。这针对页面上已有的合法 JavaScript,并且未能正确清理用户输入。
XSS 的危害是什么?
XSS 利用对网站的影响取决于目标应用程序或站点以及受损数据和用户。以下通常适用于 XSS 攻击的潜在影响:
如果涉及敏感数据,例如银行交易或医疗记录,则后果可能非常严重。
受损用户在应用程序中拥有的权限越多,攻击的后果就可能越严重。
用户输入敏感的个人身份信息的后果可能非常严重。
跨站脚本可能对整个公司产生重大影响。如果发现电子商务网站是 XSS 攻击的来源,则可能会损害公司的声誉和客户信任。
如何查找和测试 XSS 漏洞?
Burp Suite 的 Web 漏洞扫描程序可以快速准确地检测大多数 XSS 漏洞。
手动测试反射型和存储型 XSS 通常涉及在应用程序中的每个入口点输入一些简单、唯一的输入(例如一个短的字母数字字符串),同时它识别提交的输入在 HTTP 响应中返回的每个位置,并分别测试每个位置以查看是否可以利用精心制作的输入来执行任意 JavaScript。这使您能够识别 XSS 发生的环境并选择合适的有效负载来利用它。
手动测试 URL 参数中的基于 DOM 的 XSS 遵循类似的模式:
在参数中输入一些简单、唯一的输入。
使用浏览器的开发者工具在 DOM 中搜索此输入。
测试每个位置以查看它是否可利用。
另一方面,其他类型的 DOM XSS 更难以检测。要发现非基于 URL 的输入(例如 document.cookie)或非基于 HTML 的接收器(例如 setTimeout)中的基于 DOM 的漏洞,没有比研究 JavaScript 代码更好的方法了,这可能非常耗时。Burp Suite 中的 Web 漏洞扫描程序结合了静态和动态 JavaScript 分析,可以成功地找到基于 DOM 的漏洞。
如何保护自己免受 XSS 攻击?
由于存在如此多种类型的跨站脚本攻击,企业需要了解如何保护自己并避免未来的问题。由于其日益复杂,网站比以往任何时候都更难以严格监控。随着时间的推移,攻击的频率可能会增加。
以下建议可以帮助保护您的用户免受 XSS 攻击:
应清理用户输入。验证用户输入以捕获可能存在危害的输入。对输出进行编码,以避免浏览器自动加载并执行行为,而此行为是由潜在危险的用户提供的数据触发的。
限制用户提供的数据的使用。
利用内容安全策略。提供了针对 XSS 攻击的额外保护和缓解层。定期使用 Web 应用程序漏洞扫描工具来检测软件中的 XSS 漏洞。
虽然 XSS 攻击仍然是一种流行(且成功的)攻击媒介,但您可以通过实施谨慎的设计和测试来保护自己,以确保您的网站或 Web 应用程序不受攻击(并保护您的用户)。