减轻来自提交数据的 XSS 攻击 - < 字符是所有攻击的核心吗?

Mitigating XSS attacks from submitted data - is the < character the heart of all attacks?

我一直在细读 OWASP Xss Filter Evasion cheat sheet,似乎大多数(所有?)基于用户输入的 XSS 攻击向量都依赖于成功提交 < 字符或其编码版本的能力。 根据 OWASP 文档,我找不到任何可以绕过以某种方式注入 < 字符的攻击向量。因此,如果输入过滤器从用户提交的数据中检查并删除或替换 < 的所有实例,是否会降低 XSS 风险?

具体来说,我想问的是是否还有其他不依赖于 < 字符的针对用户提交数据的 XSS 攻击向量。

显然这不会减轻 SQL 注入等问题,但这是一个单独的问题。

感谢任何意见!

我不打算深入探讨这个 会阻止什么,但我会解决它允许通过的一些问题。

假设您的过滤器接受一个字符串,returns 一个所有 < 都替换为空字符串的字符串。忽略如果你不小心的话你可能会搞砸这个实现。例如,如果您将不受信任的数据注入 html attributesjavascript strings,您什么也没做缓解 XSS。

这是一个 XSS 攻击向量的示例,我们可以使用它来绕过 FilterLeftBrackets()

<div id="content" data-query="~injection-point~"></div>

有效载荷可以是:q" onmouseover=alert('xss'); data-x="

导致:

<div id="content" data-query="q" onmouseover=alert('xss'); data-x=""></div>

这是 JavaScript:

var queryMsg = "you searched for: " + "~injection-point~";

有效载荷可以是:q"; alert('xss'); var x="

导致:

var queryMsg = "you searched for: " + "q"; alert('xss'); var x="";

在这两种情况下,您都需要转义 ",但很容易 '。注入的问题在于它完全取决于上下文。请仔细考虑您将用户输入的位置,并检查哪些内容可能已用于 "break out" 您假设已设置的约束。

简而言之,使用库...不要想出你自己的方案,要考虑上下文。


请注意逃避作弊sheet:

This cheat sheet is for people who already understand the basics of XSS attacks but want a deep understanding of the nuances regarding filter evasion.

您可能会发现这更有帮助: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

我也是 google 教程的忠实粉丝:https://www.google.com/about/appsecurity/learning/xss/