📜  跨站点脚本编写

📅  最后修改于: 2020-12-24 00:45:44             🧑  作者: Mango

跨站脚本

跨站点脚本也称为XSS。当黑客在用户浏览器中执行恶意JavaScript时,将发生跨站点脚本编写。在这种攻击中,代码将在受害者的浏览器中运行。初始注入后,攻击者无法完全控制该站点。取而代之的是,恶意代码会被不良行为者攻击在有效网站的顶部。每次加载网站时,都会执行恶意软件,并且这将欺骗浏览器。

XSS中的JavaScript

PHP那样使用服务器端语言来影响网站的访问者。 JavaScript无法在服务器上运行,因为它是客户端的。使用后台请求,它可以与服务器交互。攻击者可以使用这些后台请求将恶意内容添加到网页中,而无需刷新网页。这些请求可以异步执行操作或收集有关客户端浏览器的分析。

跨站点脚本的工作

当攻击者利用网站软件上的漏洞时,攻击者才可以将其代码注入受害者网站的网页中。成功利用此漏洞后,攻击者可以注入其脚本,该脚本将使用受害者的浏览器执行。

当受害者的浏览器页面成功运行JavaScript时,可以从会话中访问有关目标用户的敏感信息。该会话使攻击者可以将站点的管理员作为目标,从而完全破坏了一个网站。

当网站上的大多数公共可用页面都存在漏洞时,跨站点脚本攻击将非常有用。在这种情况下,可以通过在网站上添加其恶意内容,网络钓鱼提示和广告来定位网站的访问者,从而注入恶意代码。

跨站点脚本攻击的类型

根据我们的目标,可以使用多种方法来使用跨站点脚本。跨站点脚本攻击的最常见类型如下:

存储的跨站点脚本攻击

当攻击者将有效负载存储在受感染的服务器上时,在这种情况下,将发生存储的跨站点脚本攻击。因此,该恶意代码将由网站传递给其他访问者。在此攻击中,攻击者仅需要采取初始操作,因此,许多访问者必须受到损害。存储的跨站点攻击是最危险的跨站点脚本。这种攻击的一个示例包括我们配置文件的字段,例如我们的电子邮件ID,用户名,这些字段由服务器存储并显示在我们的帐户页面上。

反映跨站点脚本攻击

当数据从浏览器发送到服务器,并且有效载荷存储在该数据中时,在这种情况下,将发生反射的跨站点脚本。此攻击的一个示例包括发送给目标的联系表或网站的搜索数据,其中包含恶意脚本。搜索表单是另一种反映性的跨站点攻击,其中访问者将搜索查询发送到服务器,并且结果只能由访问者看到。受害者的自定义链接是由攻击者发送的,这些链接将访问者定向到易受攻击的页面。

自我跨站点脚本攻击

当攻击者利用此漏洞(需要手动更改和非常特定的上下文)时,在这种情况下,将发生跨站点自我脚本攻击。具体更改包括将我们的信息设置为有效载荷或cookie值类型的事物。

盲跨站点脚本攻击

如果攻击者无法看到攻击的结果,则将发生盲目的跨站点脚本。在盲目的跨站点脚本攻击中,该漏洞位于该页面上,只能由授权用户访问。如果攻击者想要成功发起攻击,则需要为此做更多准备。如果有效负载失败,攻击将不会收到任何通知。黑客如果想提高这类攻击的成功率,也可以使用多语种。多重语言可以在不同的场景下工作,例如脚本标签,纯文本和属性。

基于DOM的跨站点脚本攻击

如果页面上的JavaScript易受跨站点脚本(XSS)攻击而不是服务器本身的攻击,在这种情况下,将发生基于DOM的跨站点脚本攻击。 JavaScript可以向页面添加交互性。它还可以在URL中添加参数,该参数用于在加载页面后修改页面。如果未清除用户的值,则可以在修改DOM时将恶意代码添加到页面。当URL提供语言并且网站更改为这些语言而不是默认语言时,这将显示基于DOM的跨站点脚本的示例。

防止跨站点脚本攻击

可以使用攻击者利用的多种方法来利用网站漏洞。如果我们想减少跨站点脚本编写的风险,则没有单一的策略。不安全的用户输入有助于跨站点脚本攻击,因为它直接呈现在网站的网页上。如果正确清理了用户的输入,则这种攻击将是不可能的。我们可以确保不会以多种方式在我们的网站上逃脱用户的输入。使用以下保护措施,我们可以加固我们的Web应用程序并保护我们的网站。

白名单值

我们可以将用户的输入限制为特定的白名单。这种做法使我们只能将安全且已知的值发送到服务器。如果我们知道接收数据,例如下拉菜单的内容,则受限的用户输入将仅起作用。

限制输入中的HTML

HTML仅限于受信任的用户。如果我们想允许输入的格式和样式,可以使用Markdown而不是HTML来生成内容。如果要使用HTML,则应该使用健壮的消毒器(如DOMPurify)对其进行消毒,该消毒器用于删除所有不安全的代码。

消毒价值

如果我们在用户生成的页面上使用内容,则应通过使用实体代替不安全字符来确保不会导致HTML内容。常规字符和实体的外观相同,但是实体无法生成HTML。

在Cookie上使用HTTPOnly标志

会话cookie用于允许网站在两次请求之间识别用户。攻击者经常窃取用户的Cookie并窃取管理会话。一旦攻击者窃取了用户的Cookie,他们就可以登录到管理员帐户,而无需授权访问或凭据。 HttpOnly cookie用于防止JavaScript读取cookie的内容,并增加攻击者窃取会话的难度。使用这种方法,我们只能阻止攻击者的cookie。攻击者仍然可以充当管理员用户,并使用活动的浏览器会话发送请求。如果攻击者使用cookie作为主要标识机制,在这种情况下,此方法将仅有用。

使用WAF

我们可以使用防火墙来虚拟修补对我们网站的攻击。此方法用于在我们的网站收到恶意请求之前拦截SQLi,RCE,XSS等请求。像DDOS这样的大规模攻击也可以用它来保护。