为什么要因XSS注入而逃避&符

Jin*_* Ni 3 security xss escaping

这五个字符OWASP建议逃生避免XSS注射是 &<>"'

在它们当中,我无法理解为什么&(&)应该被转义,以及如何将其用作注入脚本的向量。可以举一个例子,其他所有四个已转义的字符而不是&符,因此将存在XSS注入漏洞。

我已经检查了另一个问题,但是这个答案确实并没有使事情变得更清晰。

Sil*_*Fox 6

此处的答案仅在HTML属性上下文中的嵌套JavaScript上下文中解决了该问题,而您的问题专门询问了纯HTML上下文转义的问题。

在这个问题中,转义应该按照OWASP针对JavaScript的建议进行

除字母数字字符外,请使用\ uXXXX Unicode转义格式(X =整数)转义所有字符。

它将已经处理,&因为它不是字母数字。

从实用的角度回答您的问题,为什么您不逃脱&符?

的HTML表示形式&&amp;,因此这样做很有意义。如果你没有,任何时候用户输入&amp&lt&gt到您的应用程序,你的应用将会使&<或者,>而不是&amp&lt&gt

边缘情况?绝对是 安全问题?不应该这样

HTML5语法“字符引用”部分中

字符引用必须以U + 0026 AMPERSAND字符(&)开头。在此之后,有三种可能的字符引用:

  • 命名字符参考
  • 十进制数字字符参考
  • 十六进制数字字符参考

&遇到:

切换到数据状态。

尝试使用一个字符引用,而没有其他允许的字符。

如果未返回任何内容,请发出U + 0026 AMPERSAND字符(&)令牌。

否则,发出返回的字符令牌。

因此,之后的任何内容都&将导致&输出或表示的字符。如下面的字符必须是字母数字,否则他们不会被消耗掉,没有一个转义字符的机会(例如'"><)被消耗而忽视,因此有一个攻击者改变解析方面的小的安全隐患。但是,您永远不会知道是否存在一个浏览器错误,该错误没有完全正确地遵循标准,因此我总是会逃脱&。Internet Explorer有一个您可以指定的问题,<%它可以解释为<允许绕过XSS攻击媒介的.NET请求验证。始终要比后悔更安全。