Jin*_* Ni 3 security xss escaping
这五个字符OWASP建议逃生避免XSS注射是
&
,<
,>
,"
,'
。
在它们当中,我无法理解为什么&
(&)应该被转义,以及如何将其用作注入脚本的向量。可以举一个例子,其他所有四个已转义的字符而不是&符,因此将存在XSS注入漏洞。
我已经检查了另一个问题,但是这个答案确实并没有使事情变得更清晰。
此处的答案仅在HTML属性上下文中的嵌套JavaScript上下文中解决了该问题,而您的问题专门询问了纯HTML上下文转义的问题。
在这个问题中,转义应该按照OWASP针对JavaScript的建议进行:
除字母数字字符外,请使用\ uXXXX Unicode转义格式(X =整数)转义所有字符。
它将已经处理,&
因为它不是字母数字。
从实用的角度回答您的问题,为什么您不逃脱&符?
的HTML表示形式&
是&
,因此这样做很有意义。如果你没有,任何时候用户输入&
,<
或>
到您的应用程序,你的应用将会使&
,<
或者,>
而不是&
,<
或>
。
边缘情况?绝对是 安全问题?不应该这样
字符引用必须以U + 0026 AMPERSAND字符(&)开头。在此之后,有三种可能的字符引用:
- 命名字符参考
- 十进制数字字符参考
- 十六进制数字字符参考
当&
遇到:
切换到数据状态。
尝试使用一个字符引用,而没有其他允许的字符。
如果未返回任何内容,请发出U + 0026 AMPERSAND字符(&)令牌。
否则,发出返回的字符令牌。
因此,之后的任何内容都&
将导致&
输出或表示的字符。如下面的字符必须是字母数字,否则他们不会被消耗掉,没有一个转义字符的机会(例如'
,"
,>
,<
)被消耗而忽视,因此有一个攻击者改变解析方面的小的安全隐患。但是,您永远不会知道是否存在一个浏览器错误,该错误没有完全正确地遵循标准,因此我总是会逃脱&
。Internet Explorer有一个您可以指定的问题,<%
它可以解释为<
允许绕过XSS攻击媒介的.NET请求验证。始终要比后悔更安全。