HTML:我应该编码大于或不大吗? (>>)

时间:2012-01-25 21:37:54

标签: html html5 encoding xss

编码可能不安全的数据时,是否有理由编码>

  • 无论如何都是validates
  • 浏览器以相同的方式解释相同的方式(在attr="data"attr='data'<tag>data</tag>
  • 的情况下

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

  • 简化基于正则表达式的标记删除。 <[^>]+>?(罕见)
  • 非引用字符串attr=data: - o (没有发生!)
  • 代码中的美学。 (那又怎样?)

我错过了什么吗?

6 个答案:

答案 0 :(得分:35)

严格来说,为防止HTML注入,您只需将<编码为&lt;

如果要将用户输入放入属性中,请将"编码为&quot;

如果您正确使用正确引用的属性,则无需担心>。但是,如果你不确定这一点,你应该为了安心而编码 - 它不会造成任何伤害。

答案 1 :(得分:15)

5.3.2节中的HTML4规范说明了

  

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

所以我相信你应该将<{1}}更大的>符号编码为&gt;(因为你应该遵守这些标准)。

答案 2 :(得分:4)

当前浏览器的HTML解析器在没有引用> s

的情况下没有问题

然而,遗憾的是,在JS中使用正则表达式"parse" HTML非常常见。 (例如:Ext.util.Format.stripTags)。编写糟糕的命令行工具,IDE或Java类等也可能不够复杂,无法确定开始标记的限制。

所以,你可能会遇到像这样的代码问题:

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

(请注意语法高亮显示器如何处理此代码段!)

答案 3 :(得分:0)

始终

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

如果您没有根据用户输入处理动态输出,这可能会觉得不是一个问题,但是至少要理解,如果不是为了养成一个好习惯,这一点很重要。

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

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

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

可能是img&gt;将作为图像标记从浏览器中解析。浏览器总是尝试解析未关闭的标签或引号。正如basile所说的那样使用标准,否则你可能会在不了解错误来源的情况下获得意想不到的结果。