普通 XSS 和 Dom XSS 漏洞有什么区别?

信息安全 xss
2021-08-14 09:04:08

我不是计算机专家,但出于好奇,我最近开始学习 PHP 来编写自己的网站,并且阅读了一些 Web 应用程序中最常见的漏洞。我知道有关跨站点脚本漏洞的基础知识。因此,当用户的输入没有被正确过滤并且被用于页面正文时,就会发生 XSS 攻击,因此攻击者可以将诸如 javascript/vbscript 代码之类的东西注入浏览器并在客户端做一些事情,例如劫持他们的cookie 并将它们保存在数据库中。

但是 XSS 和 Dom XSS 有什么区别呢?它们之间是否存在根本区别?DOM XSS 漏洞是否会带来更高的安全风险?如果是,如何?我应该如何寻找 Web 应用程序中的 Dom XSS 漏洞?我在互联网上找到了一些东西,但其中一些对于我目前的理解水平来说是先进的。

多谢你们。

2个回答

好的,所以在基本级别上有三种类型的跨站点脚本。

反射 - 您向应用程序输入数据,然后在不转义、清理或编码的情况下回显数据,并且可以包含 JavaScript 代码,然后在应用程序的上下文中执行

存储 - 您输入存储在应用程序中的数据,然后稍后返回以响应另一个请求。此数据包含在应用程序上下文中执行的 JavaScript 代码

基于 DOM - 您输入修改网页 DOM 的数据,该数据包含在应用程序上下文中执行的 JavaScript。它与反射型 XSS 相对相似,但不同之处在于,在修改 DOM 时,数据可能永远不会到达服务器(这会改变它可以/应该如何缓解,因为服务器端过滤器可能无效)。

一个例子是 Web 应用程序,它大量使用客户端 JavaScript,并获取用户数据并更新 DOM,而无需实际将数据发送到服务器。如果您看到应用程序在您输入数据时对您正在查看的页面进行即时更改,则很可能它们正在使用客户端 JavaScript 来更新 DOM。

就查找它们而言,这有点棘手,因为查找基于 DOM 的 XSS 的工具不像反射或存储型 XSS 的工具那样发达。我知道的唯一专门解决它的工具是Dominator还有关于DOM XSS Wiki的信息可能很有用。

简单地说,基于 DOM 的 XSS 可以在客户端不请求服务器的情况下被利用。攻击发生在本地的 DOM 中(在用户上下文中)。

对于开发人员来说,要找到并纠正这些漏洞,这很复杂,因为目前还没有成熟的技术来检测这些漏洞。使用了一些程序和脚本,但这仍然是非常“正在进行中的工作”,甚至是提到的“Dominator”软件(顺便说一句,它对于 IMO 所做的事情来说太贵了)。