HTML和属性编 码

问题描述 投票:8回答:2

我碰到一个post on Meta SO,我很好奇,什么是未编码和编码的HTML字符之间的细微差别,在HTML属性中的上下文:安全,最佳实践和浏览器的支持。

xss encoding html
2个回答
9
投票

HTML编码替换某些字符在HTML标记语义上有意义的,具有可被显示给用户,而不影响解析标记等效字符。

是<,>,&和“其与&lt;&gt;&amp;,和&quot;替换最显著和明显的字符,分别。此外,编码器可以用等价的HTML实体编码替换高阶字符,因此内容可以保存,甚至在页面发送给浏览器作为ASCII事件正确地呈现。

HTML属性编码,在另一方面,只替换那些重要的是防止字符的字符串从断裂的HTML元素的属性的字符的子集。特别是,你通常只需更换”,&和<与&quot;&amp;&lt;,这是因为属性的性质,它们包含的数据,以及他们如何被解析并通过浏览器或HTML解析器的解释是不同的比HTML文档及其元素是如何被读取。


在如何,涉及到XSS而言,要正确过滤来自外部源的字符串(如用户),所以只要不破你的网页,或者更重要的是,注入的标记和脚本,可以改变或破坏你的应用程序或影响用户的机器上(通过利用浏览器或操作系统漏洞的优势)。

如果你想在你的页面中显示用户生成的内容,你会HTML编码字符串,然后在您的标记显示出来,并且他们进入一切都会从字面上,而不必担心XSS或折断标记来显示。

如果您需要用户生成的内容附加到元素的属性(例如,链路上的tooltip),你的属性编码,以确保内容不破该元素的标记。

你可以只使用相同的功能HTML编码来处理属性编码?从技术上来说,是的。在您链接的元问题的情况下,这听起来像他们为被字面上显示的属性值,从而导致编码标记,如果你按照服用经编码的HTML和对其进行解码,然后使用该结果。


5
投票

我建议找过OWASP XSS Prevention Rules 1 and 2。 简单总结...

规则1 HTML

逃生用HTML实体编码以下字符... & - > &amp; < - > &lt; > - > &gt; " - > &quot; ' - > &#x27; / - > &#x2F;

规则2对于HTML公共属性

除了字母数字字符,转义ASCII值小于256的所有字符&#XHH;格式(或命名实体如果可用)以防止切换出的属性。之所以这样的规则是如此广泛的是,开发人员经常离开属性加引号。正确引用属性只能使用相应的引用逃脱。未引用属性可破出与许多字符,包括[空格]%* +, - /; <=> ^和|。

© www.soinside.com 2019 - 2024. All rights reserved.