在显示用户生成/提交的信息时,转义其他特殊字符但不更改与号是否存在安全风险?我想让我的用户自由输入 html 实体、十六进制和十进制特殊字符,而不会给我的清理程序增加不必要的复杂性。
这完全取决于数据放入的上下文。
在 HTML 中,表示纯文本的主要原因&
通过字符引用是避免歧义 as the &
也是此类字符引用的开始。这种歧义的一个流行的例子是一个简单的例子&
作为 HTML 属性中 URL 参数的一部分,如下所示:
<a href="/?lang=en§=foobar">
这里的&
未使用相应的字符引用进行适当编码,因此解析器将其视为字符引用的开头。自从sect is a HTML 中的已知实体,代表节字符 §
,这个属性值实际上被解释为/?lang=en§=foobar
.
所以留下一个平淡的&
因为它不会像 HTML 中的其他特殊字符那样产生实际威胁,因为它们可以更改数据放入的上下文:
- 标签分隔符
<
and >
可以开始或结束标签声明,
- 属性值分隔符
"
and '
可以开始或结束属性值声明。
为了安全起见,您应该使用htmlspecialchars与双编码参数设置为false
避免对已存在的字符引用进行双重编码:
var_dump(htmlspecialchars('<"&\'>', ENT_QUOTES, 'UTF-8', false) === '<"&'>'); // bool(true)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)