html 文档模板,html/template(模板)

import "html/template"

概述

索引

示例

概观

模板包(html/template)实现了数据驱动的模板,以便在代码注入过程中安全地生成HTML输出。它提供了与包文本/模板相同的接口,只要输出是HTML,就应该使用它来代替文本/模板。

这里的文档侧重于包的安全特性。有关如何自行编写模板的信息,请参阅文本/模板的文档。

介绍

该软件包包装文本/模板,以便您可以共享其模板API以安全地解析和执行HTML模板。

tmpl, err := template.New("name").Parse(...)// 错误检查已删除err = tmpl.Execute(out, data)

如果成功,tmpl 现在将是注射安全的。否则, err 是 ErrorCode 文档中定义的错误。

HTML模板将数据值视为应该被编码的纯文本,以便它们可以安全地嵌入到HTML文档中。转义是上下文的,因此操作可以出现在 JavaScript,CSS和URI 上下文中。

这个包使用的安全模型假定模板作者是可信的,而 Execute 的数据参数不是。更多细节在下面提供。

示例

import "text/template"...t, err := template.New("foo").Parse(`{ {define "T"}}Hello, { {.}}!{ {end}}`)err = t.ExecuteTemplate(out, "T", "")

产生

Hello, !

但在HTML /模板中的上下文自动转义

import "html/template"...t, err := template.New("foo").Parse(`{ {define "T"}}Hello, { {.}}!{ {end}}`)err = t.ExecuteTemplate(out, "T", "")

产生安全的、转义过的HTML输出

Hello, <script>alert('you have been pwned')</script>!

上下文

该软件包可以理解 HTML,CSS,JavaScript和URI 。它给每个简单的操作流水线增加了清理功能,所以给出了摘录

{ {.}}

在解析时,每个 { {.}} 都会被覆盖,以根据需要添加转义函数。在这种情况下,它变成了

{ {. | htmlescaper}}

urlescaper,attrescaper和htmlescaper 是内部转义函数的别名。

错误

有关详细信息,请参阅ErrorCode的文档。

A fuller picture

在第一次阅读时可以跳过此包评论的其余部分;它包含了解转义上下文和错误消息所需的详细信息。大多数用户不需要了解这些细节。

上下文

假设 { {.}} 是O'Reilly: How are you?,下表显示了 { {.}} 在左侧上下文中使用时的显示方式。

Context                          { {.}} After{ {.}}                            O'Reilly: How are <i>you</i>?                O'Reilly: How are you?                O'Reilly: How are %3ci%3eyou%3c/i%3e?              O'Reilly%3a%20How%20are%3ci%3e...%3f             O\x27Reilly: How are \x3ci\x3eyou...?               "O\x27Reilly: How are \x3ci\x3eyou...?"     O\x27Reilly: How are \x3ci\x3eyou...\x3f

如果在不安全的上下文中使用,则可能会过滤掉该值:

Context                          { {.}} After                 #ZgotmplZ

因为“O'Reilly:”不是像“http:”这样的允许协议。

如果{ {.}}是无关紧要的词left,那么它可以更广泛地出现,

Context                              { {.}} After{ {.}}                                left                    left                     left                    left                left        left             left       left  left   left

非字符串值可以在JavaScript上下文中使用。如果是

struct{A,B string}{ "foo", "bar" }

在转义模板中

然后模板输出是

请参阅包 json 以了解如何封装非字符串内容以嵌入JavaScript上下文中。

键入的字符串

默认情况下,此包假定所有管道都生成纯文本字符串。它添加了必要的转义管道阶段,以便在正确的上下文中正确安全地嵌入纯文本字符串。

如果数据值不是纯文

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值