编码可能不安全的数据时,是否有理由编码>
?
attr="data"
,attr='data'
,<tag>data</tag>
)我认为有人会这样做的原因是
<[^>]+>?
(罕见)attr=data
。 : - o (没有发生!)我错过了什么吗?
答案 0 :(得分:35)
严格来说,为防止HTML注入,您只需将<
编码为<
。
如果要将用户输入放入属性中,请将"
编码为"
。
如果您正确使用正确引用的属性,则无需担心>
。但是,如果你不确定这一点,你应该为了安心而编码 - 它不会造成任何伤害。
答案 1 :(得分:15)
答案 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所说的那样使用标准,否则你可能会在不了解错误来源的情况下获得意想不到的结果。