深入了解存储型 XSS
在本文中,我们将深入了解其中一种跨站点脚本,即存储型 XSS。
什么是存储的跨站点脚本?
- 存储的跨站点脚本漏洞在基于 Web 的应用程序中很常见,这些应用程序支持最终用户或管理人员访问同一应用程序中的用户记录和数据之间的交互。当一个用户提交的数据存储在应用程序中(通常在后端数据库中)并在没有经过适当过滤或清理的情况下显示给其他用户时,就会出现此漏洞。
- 针对存储的 XSS 漏洞的攻击通常涉及对应用程序的至少两个请求。在第一个请求中,攻击者发布了一些包含应用程序持有的恶意代码的精心制作的数据。在第二个请求中,受害者查看包含攻击者数据的页面,并且在受害者的浏览器中执行脚本时执行恶意代码。
图解说明:
从上图
- 攻击者以文件的形式发送恶意脚本。
- 如果 Web 应用程序中的元素未经过清理,它将存储在网站数据库中
- 普通用户或受害者尝试使用 Web 应用程序的功能,但恶意脚本已被执行,因为它已经存储在数据库中,并且 cookie 或会话被攻击者窃取。
影响和风险:存储的跨站点脚本会对 Web 应用程序及其用户产生巨大影响。
- 攻击者可以劫持用户帐户。
- 攻击者可以窃取凭据。
- 攻击者可以泄露敏感数据。
- 攻击者可以获得对您客户计算机的访问权限。
存储型 XSS 攻击示例:
- 在浏览拍卖网站时,攻击者发现了允许 HTML 标记嵌入网站评论部分的漏洞。假设攻击者可以发布包含嵌入式 JavaScript 的评论,而应用程序没有过滤或清理它。在这种情况下,攻击者可以发布精心制作的评论,导致任意脚本在查看评论的任何人的浏览器中执行,包括卖家和其他潜在买家。
- 由于评论框中输入的数据保存在数据库中,如果其他用户请求评论数据,恶意脚本作为响应返回给用户。
The attacker adds the following comment: Great Auction Website! Read my review here
.
- 由此,每次访问页面时,评论中的 HTML 标记都会激活托管在另一个站点上的 JavaScript 文件并窃取访问者的会话数据。
- 使用会话cookie,攻击者可以很容易地破坏受害者的敏感数据并接管受害者的帐户或从访问者的理解中窃取一些宝贵的资产。
- 与在单击链接后激活脚本的反射攻击一样,存储攻击只需要受害者访问受感染的网页或网页元素。存储型 XSS 会增加对严重性的影响,因为它直接将 XSS 有效负载保存在数据库中。
预防:
- 到达时过滤输入。当用户输入恶意脚本并向服务器请求时,此时,尝试过滤和清理输入。
- Web 应用程序防火墙是保护 Web 应用程序免受跨站点脚本攻击的最有效和最佳的解决方案。
- 转义——转义数据意味着获取应用程序收到的数据并确保其安全,然后再将其呈现给最终用户。
- 验证输入 - 验证输入是确保应用程序呈现正确数据并防止恶意数据损害站点、数据库和用户的过程。