
本文介绍 Go 标准库 html 包中的 EscapeString 函数,用于将原始 HTML 字符串中的特殊字符(如 , &, ", ')转换为对应 HTML 实体,防止 XSS 攻击,确保输出内容被浏览器安全解析。
本文介绍 go 标准库 `html` 包中的 `escapestring` 函数,用于将原始 html 字符串中的特殊字符(如 ``, `&`, `"`, `'`)转换为对应 html 实体,防止 xss 攻击,确保输出内容被浏览器安全解析。
在 Web 开发中,用户输入或动态生成的内容若直接插入 HTML 页面,可能引发跨站脚本(XSS)漏洞。例如,字符串 <script>alert(123);</script> 若未经处理直接渲染,浏览器会执行其中的 JavaScript 代码,造成安全隐患。Go 提供了标准库 html 包,其 EscapeString 函数专为此类场景设计——它将危险字符转义为安全的 HTML 实体表示。
使用方式非常简洁:
package main
import (
"fmt"
"html"
)
func main() {
unescaped := `<script>alert(123);</script>`
escaped := html.EscapeString(unescaped)
fmt.Println(escaped) // 输出:<script>alert(123);</script>
}
该函数会转义以下字符:
- > → >
- & → &
- " → "
- ' → '(注意:单引号 ' 在 HTML 中虽非严格必需转义,但 EscapeString 仍会处理,增强兼容性)
⚠️ 注意事项:
- html.EscapeString 仅做字符串级转义,不解析 HTML 结构,也不校验标签合法性,因此不能替代 HTML 模板引擎的安全上下文机制;
- 若需在 HTML 模板中动态插入内容,请优先使用 html/template 包(如 {{.Content | safeHTML}} 配合 .Safe()),它能根据上下文(如标签内、属性值、JS 字符串等)自动选择最严格的转义策略;
- EscapeString 不处理 Unicode 控制字符或零宽字符等高级攻击向量,敏感场景建议结合 CSP(内容安全策略)与输入验证进行纵深防御。
总结:对于纯文本内容需嵌入 HTML 文本节点(如
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











