首页 > 后端开发 > Golang > 正文

Golang html/template安全生成HTML示例

P粉602998670
发布: 2025-10-20 09:13:01
原创
367人浏览过
使用 html/template 可自动转义变量防止 XSS,如 {{.Username}} 会转义恶意脚本;需插入可信 HTML 时可使用 template.HTML 类型,但必须确保内容安全;应避免手动拼接 HTML,而将原始数据交由模板处理,以保证各上下文正确转义。

golang html/template安全生成html示例

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

基础用法:自动转义变量

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

示例:

package main

import (
    "html/template"
    "log"
    "os"
)

func main() {
    const tpl = `<p>用户名: {{.Username}}</p><p><span>立即学习</span>“<a href="https://pan.quark.cn/s/00968c3c2c15" style="text-decoration: underline !important; color: blue; font-weight: bolder;" rel="nofollow" target="_blank">go语言免费学习笔记(深入)</a>”;</p>`

    t := template.Must(template.New("example").Parse(tpl))

    data := struct {
        Username string
    }{
        Username: `<script>alert("xss")</script>`, // 恶意输入
    }

    err := t.Execute(os.Stdout, data)
    if err != nil {
        log.Fatal(err)
    }
}
登录后复制

输出结果:

<p>用户名: <script>alert("xss")</script></p>

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

插入已信任的HTML内容

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

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

NameGPT名称生成器
NameGPT名称生成器

免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

NameGPT名称生成器 0
查看详情 NameGPT名称生成器
data := struct {
    Content template.HTML
}{
    Content: template.HTML(`<strong>这是加粗文本</strong>`),
}
登录后复制

模板中:

{{.Content}}

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

常见安全类型说明

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

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

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

避免手动拼接 HTML

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

// 错误做法 UnsafeHTML := "<a href='" + userURL + "'>" + userName + "</a>"

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

{{.UserName}}

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

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

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

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号