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

Bry*_*eld 42 html xss html5 encoding

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

  • 验证两种方式.
  • 在浏览器解释的相同的任何一种方式,(在的情况下attr="data",attr='data',<tag>data</tag>)

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

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

我错过了什么吗?

Nie*_*sol 36

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

如果要将用户输入放在属性中,也要编码"&quot;.

如果你正确地做事并使用正确引用的属性,你不必担心>.但是,如果你不确定这一点,你应该编码它只是为了安心 - 它不会造成任何伤害.

  • **安全警告:**此答案不正确.对于一个基本的例子,```是一个可接受的属性引用标记,而不是在这样的属性中转义它是攻击向量.根据上下文,还有其他攻击向量. (2认同)

Bas*_*tch 16

HTML4在其第5.3.2节规范指出,

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

所以我相信你应该将更大的>符号编码&gt;(因为你应该遵守标准).

  • 标准说应该,​​但不是必须的.更具体的说:"......避免老用户代理出现问题".这意味着,如果您不针对1999年以前的浏览器,则无需执行任何操作. (4认同)
  • 但在原始海报的情况下,遵守标准是可能的,也是简单的.当他可以避免这种情况时,他为什么要对他们做些什么? (2认同)

use*_*621 5

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

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

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

<script data-usercontent=">malicious();//"></script>
Run Code Online (Sandbox Code Playgroud)

(注意语法高亮是如何处理这个片段的!)