服务器端与客户端的 XSS 危险

信息安全 xss
2021-08-14 17:37:58

我在看这里,我知道反射 DOM XSS(客户端 XSS)不会通过服务器端脚本,但反射 XSS(服务器端 XSS)会,但都不会命中/存储在数据库中。但是我对一种注射可以做什么而另一种不能做什么感到困惑。XSS 通过服务器端脚本与直接注入客户端页面(无论如何脚本仍然在客户端运行)有什么危险?此外,是否存在持久性 DOM XSS(客户端 XSS)注入之类的东西,如果如何?

2个回答

XSS 的影响是相同的,无论它是存储/反射还是基于 DOM/服务器端 - 攻击者完全控制了 Web 会话。存储型 XSS 更容易被利用(你不需要让用户点击链接),所以它更严重。漏洞是基于 DOM 还是服务器端的漏洞对严重性影响不大。

您可以存储基于 DOM 的 XSS。例如,考虑一个允许用户发布产品评论的电子商务网站。它是一个单页应用程序,因此当您查看产品时,JavaScript 会发送一个 Ajax 请求来获取产品信息。Ajax 后端返回正确转义的 JSON,因此它不容易受到攻击。但是,JavaScript 将返回的数据呈现为 HTML。这会产生 XSS 漏洞:恶意用户可以提交包含 XSS 攻击的评论,当受害者用户查看该产品时,XSS 有效负载会在其浏览器中执行。

存储型或持久型 XSS 是一种 XSS 漏洞,其中不受信任的用户输入由服务器处理并存储在文件或数据库中而无需任何验证,这些不受信任的数据从存储中获取并在响应中反映,无需编码或转义导致只要存储的数据反映在响应中,就会在浏览器中永久执行代码。

Reflected or Non-Persistent XSS 是一种 XSS 漏洞,其中不受信任的用户输入在没有任何验证的情况下由服务器立即处理,并在没有编码或转义的情况下反映在响应中,导致在浏览器处执行代码。

基于DOM的XSS是客户端XSS的一种形式,它发生在数据的来源在DOM中,接收器也在DOM中,数据流永远不会离开浏览器的环境中。当由于修改浏览器中的 DOM “环境”而执行源处给出的不受信任的数据时,就会发生这种情况。当不受信任的数据相对于上下文不是转义或编码形式时,就会发生 DOM XSS。

还有 mXSS 或 Mutation XSS 是一种 XSS 漏洞,当不受信任的数据在 DOM 的 innerHTML 属性的上下文中处理并被浏览器变异,从而成为有效的 XSS 向量时发生。在 mXSS 中,用户指定的看似无害的数据可能会通过客户端或服务器端 XSS 过滤器(如果存在或不存在)并被浏览器的执行引擎变异并作为有效的 XSS 向量反射回来。

简而言之,存储的 XSS 是最大的威胁,因为它允许在没有用户交互的情况下窃取 cookie 并破坏网站(如果不支持 HTTPOnly)。反射或 DOM XSS 对攻击者也非常有用,例如执行网络钓鱼攻击。