Html 在用户提交的数据中不使用安培生是否存在安全风险?

Html 在用户提交的数据中不使用安培生是否存在安全风险?,html,string,security,validation,escaping,Html,String,Security,Validation,Escaping,在显示用户生成/提交的信息时,转义其他特殊字符但不触碰符号是否存在安全风险?我想让我的用户自由输入html实体、十六进制和十进制特殊字符,而不会给我的消毒剂增加不必要的复杂性。tldr;如果编码正确,以“符号”(或其他“特殊字符”)形式保留不属于安全问题。也就是说,重要的是输出/使用,而不是输入 这完全取决于最终如何使用数据。执行这一切都取决于数据放入的上下文 在HTML中,用字符引用表示普通的&的主要原因是因为&也是这种字符引用的开始。此类歧义的一个常见示例是作为HTML属性中URL参数的一部

在显示用户生成/提交的信息时,转义其他特殊字符但不触碰符号是否存在安全风险?我想让我的用户自由输入html实体、十六进制和十进制特殊字符,而不会给我的消毒剂增加不必要的复杂性。

tldr;如果编码正确,以“符号”(或其他“特殊字符”)形式保留不属于安全问题。也就是说,重要的是输出/使用,而不是输入


这完全取决于最终如何使用数据。执行
这一切都取决于数据放入的上下文

在HTML中,用字符引用表示普通的
&
的主要原因是因为
&
也是这种字符引用的开始。此类歧义的一个常见示例是作为HTML属性中URL参数的一部分的普通
&
,如下所示:

<a href="/?lang=en&sect=foobar">

+1强调用户输入应该在每次输出之前转义,仅此而已。想象一个CMS场景:我从数据库中取出一篇不干净的文章,然后将其输出到网页中。如果我不将&s编码到&;中,会发生什么恶作剧;s?@jeremiahs使用时,应根据上下文对其进行编码(例如输出)。然而,
&
是“相对”无害的,但问题仍然存在:要么使用了适当的技术(在这种情况下,
&
会产生什么具体的安全问题没有什么不同?@jeremiahs我能想到的[现在]与HTML相关的唯一一个问题是链接和能够附加额外的查询属性(例如,它不允许注入脚本元素)。但是,它仍然可能导致数据显示不正确,而本身并不是一个“安全问题”。请参阅Gumbo对HTML中实体编码和一些细微差别的回答。奇怪。Firefox解析
§[non-word]
§[word]不同
。我确信
§;
表格是必需的。是的,奇怪的行为。它不像帖子(FF)中宣传的那样有效但是:
只有
§;
§-
在这种情况下是编码的。我不认为应该对
§-
进行编码,尽管…@pst结尾
是可选的,但建议避免歧义。HTML所基于的语言SGML允许在文档类型声明中进行编码。因此d可能有一个名为sect的实体和一个名为section的实体;
§ion
引用什么,sect还是section?因此应该使用
来区分引用。不幸的是,今天的浏览器不支持这个SGML功能,因为他们的HTML解析器与正确的SGML解析器有很大的不同。@pst在您的示例中le引用实体sect2和三次sect作为只能由字母数字字符组成,而以字母字符开头。任何不符合此条件的字符都会以实体名称结尾。@pst此确切行为实际上是由以下内容指定的:如果字符引用作为属性的一部分使用,并且最后匹配的字符不是“
”(U+003B)字符,而下一个字符是“
=
”(U+003D)字符或ASCII数字、大写ASCII字母或小写ASCII字母范围内的字符,则出于历史原因,必须取消使用U+0026和字符(
&
)后面匹配的所有字符,并且不返回任何内容。”
var_dump(htmlspecialchars('<"&amp;\'>', ENT_QUOTES, 'UTF-8', false) === '&lt;&quot;&amp;&#039;&gt;'); // bool(true)