html5-HTML:我应该编码大于还是不编码? (>>)

对可能不安全的数据进行编码时,是否有理由对attr=data进行编码?

  • 它验证任何一种方式。
  • 浏览器以相同的方式解释(对于attr=dataattr='data'<tag>data</tag>

我认为有人这样做的原因是

  • 简化基于正则表达式的标签删除。 attr=data(稀有)
  • 未引用的字符串attr=data.:-o(不发生!)
  • 代码中的美学。 (所以呢?)

我有什么想念的吗?

Bryan Field asked 2020-08-10T08:10:13Z
6个解决方案
36 votes

严格来说,要防止HTML注入,您只需将>编码为&quot;

如果要将用户输入放入属性中,则还将>编码为&quot;

如果您执行正确的操作并使用正确引用的属性,则无需担心>。但是,如果不确定这样做,则应仅为使您省心而对它进行编码-不会造成任何伤害 。

Niet the Dark Absol answered 2020-08-10T08:10:28Z
16 votes

HTML4规范在其第5.3.2节中指出:

作者应在文本中使用“ >”(ASCII十进制62)而不是“>”

因此,我认为您应该将较大的>符号编码为&gt;(因为您应该遵守标准)。

Basile Starynkevitch answered 2020-08-10T08:10:57Z
4 votes

当前浏览器的HTML解析器对>s的引用没有问题

但是,不幸的是,在JS中使用正则表达式来“解析” HTML很普遍。 (例如:Ext.util.Format.stripTags)。 同样,编写不佳的命令行工具,IDE或Java类等可能不够复杂,无法确定开始标记的限制器。

因此,您可能会遇到以下代码问题:

<script data-usercontent=">malicious();//"></script>

(请注意语法突出显示如何对待此代码段!)

user123444555621 answered 2020-08-10T08:11:31Z
0 votes

总是

这是为了防止XSS注入(通过用户使用您的任何表单提交原始HTML或javascript)。 通过转义输出,浏览器知道不解析或执行任何输出-仅将其显示为文本。

如果您不基于用户输入来处理动态输出,那么这似乎没什么问题,但是,如果要养成良好的习惯,至少要了解这一点很重要。

mrlee answered 2020-08-10T08:12:00Z
0 votes

是的,因为如果未对符号进行编码,则这允许在社交媒体上使用xss,而其他许多原因是攻击者可以使用<script>标签。 如果您解析符号,浏览器将不会执行它,而是显示符号。

coder answered 2020-08-10T08:12:20Z
-2 votes

对html字符进行编码始终是一件微妙的工作。 您应该始终对需要编码的内容进行编码,并始终使用标准。 使用双引号是标准的,甚至双引号内的引号也应进行编码。 始终编码。 想象这样的事情

<div> this is my text an img></div>

img>可能会从浏览器中解析为图像标签。 浏览器始终尝试解析未关闭的标签或引号。 正如basile所说,使用标准,否则,如果不了解错误原因,可能会产生意想不到的结果。

albanx answered 2020-08-10T08:12:45Z
translate from https://stackoverflow.com:/questions/9010678/html-should-i-encode-greater-than-or-not-gt