HTML编码替换在HTML标记中具有语义意义的某些字符,其中可以向用户显示等效字符,而不会影响解析标记.
是<,>,&和"它们与替换的最显著和明显的字符<,>,&,和"分别.此外,编码器可以用等价的HTML实体编码替换高阶字符,因此内容可以被保留,并即使在页面以ASCII格式发送到浏览器的情况下也能正确呈现.
另一方面,HTML属性编码仅替换那些重要的字符的子集,以防止字符串破坏HTML元素的属性.具体来说,您通常只需要替换",&,和<with ",&和<."这是因为属性的性质,它们包含的数据以及浏览器或HTML解析器如何解析和解释这些属性与阅读HTML文档及其元素.
就与XSS有何关联而言,您希望从外部源(例如用户)正确清理字符串,这样它们就不会破坏您的页面,或者更重要的是,注入可能会改变或破坏您的应用程序的标记和脚本,或者影响用户的计算机(利用浏览器或平台漏洞).
如果要在页面中显示用户生成的内容,则需要对字符串进行HTML编码,然后将其显示在标记中,并且输入的所有内容都将按字面显示,而不必担心XSS或损坏的标记.
如果需要将用户生成的内容附加到属性中的元素(例如,tooltip链接上的元素),则需要进行属性编码以确保内容不会破坏元素的标记.
您是否可以使用相同的HTML编码功能来处理属性编码?从技术上讲,是的.在你链接的元问题的情况下,听起来他们正在使用编码和解码它的HTML,然后使用该结果作为属性值,这导致编码标记按字面显示,如果你遵循.
我建议您查看OWASP XSS预防规则1和2。
简短摘要...
规则1对 HTML
使用HTML实体编码转义以下字符...-
&>&
<-><
>->>
"->"
'->'
/->/
第2条为HTML通用属性
除字母数字字符外,请使用&#xHH;转义ASCII值小于256的所有字符。格式(或命名实体,如果有的话),以防止切换出该属性。该规则之所以如此广泛,是因为开发人员经常将属性置于未引用状态。正确引用的属性只能用相应的引用转义。可以用许多字符来分隔未引用的属性,包括[space]%* +,-/; <=> ^和|。
| 归档时间: |
|
| 查看次数: |
9760 次 |
| 最近记录: |