XSS 是否总是需要服务器端漏洞才能起作用?

Does XSS always require a server-side vulnerability to work?

如果这被证明是一个愚蠢的问题,我深表歉意......这是在一个理想化的、无法实现的假设的背景下帮助我理解 XSS 攻击的核心:

如果 运行-of-the-mill, does-nothing-adventurous non-malicious but unsecured HTML/CSS/JS 脚本客户端正在交换JSON 数据(不涉及 files/filesystem)to/from 完全防弹 PHP/MySQL 脚本服务器端,XSS 可能吗?

或者所有 XSS攻击总是基于access/alter/store某些[=25]的能力=] 服务器端?

我只是想弄清 "edges" 所在的位置。这几天看了几十篇关于XSS的articles/posts,但是如果答案在其中任何一篇,我都没看懂。 :(

提前致谢。

简而言之,XSS 是关于能够 运行 javascript 在用户上下文中,通过应用程序输入提供。这意味着通过开发者控制台来做这件事不算数,用户必须主动打开控制台并做他通常不会做的事情——在大多数情况下这不是有效的攻击媒介。但是,所有应用程序输入(UI、url 栏上的输入、请求 headers 等)都是注入 javascript.

的潜在方式

在反射或存储 xss 的情况下,请求被发送到服务器,并且响应包含来自请求的 javascript,其方式是在客户端上获得 运行。所以那些需要服务器。

然而,在 DOM xss 的情况下,它可以全部在客户端上,在易受攻击的 javascript 代码中。

考虑一个示例,其中 UI 有一个输入字段,当用户单击一个按钮 ("send") 时,他输入的任何内容都会添加到某种日志中 ("a chat window" 例如),由 javascript 在客户端上。如果用户输入 <script>alert(1)</script>,它可能会作为 html 附加到日志区域,从而作为 javascript 执行,而不会被发送到服务器。这将是 DOM xss 的示例,修复显然是将其附加为文本节点,而不是 html.

这通常被评为较低风险,因为在许多情况下,远程攻击者对毫无戒心的用户实际利用它的机会有限。但这仍然是一个漏洞(例如,攻击者可能会让用户将 copy-paste 某些东西放入字段中等等)。

另外一个典型的可利用案例是 javascript 读取 DOM 并将 url 的一部分添加到 url,这实际上可以由远程攻击者提供(在link 发送给受害用户的形式)。