本文目录
什么是 HTML 实体?
HTML 实体是一些特殊代码,用于表示在 HTML 中具有特殊含义或无法直接输入的字符。例如,< 是 < 字符(小于号)的 HTML 实体,否则该字符会被解析为 HTML 标签的开始。
实体可以是命名形式(<、&、©)或数字形式(<、&)。命名实体可读性更强;而数字实体适用于任何 Unicode 字符,即使该字符没有对应的命名实体也能表示。
HTML 实体编码的工作原理
编码器会扫描文本中需要转义的字符,并将它们替换为对应的实体。
- 关键转义——< > & " ' 始终会被转义,以防止 HTML 注入和 XSS 攻击
- 扩展转义——可选择将所有非 ASCII 字符编码为数字实体
- 解码模式——将实体编码后的 HTML 还原为纯文本,便于查看
免费试用 —— 无需注册
编码 HTML 实体 →何时使用 HTML 实体编码
HTML 实体编码对于安全性以及在网页中显示特殊字符都至关重要。
- 用户内容展示——在 HTML 中渲染用户生成的内容之前,务必先进行编码,以防范 XSS 攻击
- 邮件模板——对 HTML 邮件模板中的特殊字符进行编码,确保正确渲染
- 文档——在 HTML 文档中转义代码示例,使尖括号能够正确显示
常见问题解答
什么是 XSS,实体编码如何防范它?
跨站脚本(XSS)是一种攻击方式,攻击者将恶意脚本注入到其他用户浏览的网页中。如果某个用户提交 <script>alert('xss')</script> 并被作为 HTML 渲染,该脚本就会执行。实体编码会将 < 转换为 <,使其以文本形式呈现,从而阻止脚本执行。
在 HTML 中,我应该在什么时候使用 & 而不是 &?
在 HTML 属性和内容中,只要 & 不是某个 HTML 实体的组成部分,就必须编码为 &。未经编码的 & 在 HTML 中属于解析错误。在 href 属性内的 URL 中,& 同样必须编码为 & 才符合有效的 HTML 规范(尽管浏览器通常比较宽容)。
HTML 实体编码能防范 SQL 注入吗?
不能。HTML 实体编码只能防范 HTML 注入(XSS)。要防范 SQL 注入,应在数据库层使用参数化查询或预处理语句。这是两种不同的攻击方式,需要采用不同的防御手段——切勿依赖 HTML 编码来防范 SQL 注入。