Golang html/template安全生成HTML示例

使用 html/template 可自动转义变量防止 XSS,如 {{.Username}} 会转义恶意脚本;需插入可信 HTML 时可使用 template.HTML 类型,但必须确保内容安全;应避免手动拼接 HTML,而将原始数据交由模板处理,以保证各上下文正确转义。

golang html/template安全生成html示例

Go 的 html/template 包专为安全生成 HTML 而设计,能自动转义动态内容,防止 XSS 攻击。只要使用正确,即便插入用户输入也能保证输出安全。

基础用法:自动转义变量

使用 html/template 时,所有通过 {{.}} 插入的变量都会被自动转义。

示例:

package mainimport (    "html/template"    "log"    "os")func main() {    const tpl = `

用户名: {{.Username}}

立即学习go语言免费学习笔记(深入)”;

` t := template.Must(template.New("example").Parse(tpl)) data := struct { Username string }{ Username: `alert("xss")`, // 恶意输入 } err := t.Execute(os.Stdout, data) if err != nil { log.Fatal(err) }}

输出结果:

用户名: alert(“xss”)

原始脚本被转义,不会执行。

插入已信任的HTML内容

有时需要渲染合法的 HTML(如富文本内容),可使用 template.HTML 类型告诉模板该内容已净化。

注意:必须确保内容安全后再使用。

data := struct {    Content template.HTML}{    Content: template.HTML(`这是加粗文本`),}

模板中:

{{.Content}}

此时内容不会被转义,直接输出为 HTML 标签。

常见安全类型说明

html/template 提供多种标记类型来安全处理不同上下文:

template.HTML – 可信 HTML 字符串 template.CSS – 可信 CSS 内容 template.JS – 可信 JavaScript 代码 template.URL – 可信 URL(用于 href、src 等)

这些类型绕过转义,但需开发者负责其安全性。

避免手动拼接 HTML

不要在 Go 代码中拼接 HTML 字符串传给模板,例如:

// 错误做法UnsafeHTML := “” + userName + “”

应将原始数据传入模板,由模板系统处理转义:

{{.UserName}}

这样每个字段会在对应上下文中正确转义。

基本上就这些。只要坚持使用 html/template 并合理使用 template.HTML 等类型,就能在 Golang 中安全生成 HTML。关键在于信任边界清晰——只对真正可信的内容取消转义。

以上就是Golang html/template安全生成HTML示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1415117.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 09:20:34
下一篇 2025年12月16日 09:20:52

相关推荐

发表回复

登录后才能评论
关注微信