Go 范围内的转义模板
我想打印用户列表,如:Go 范围内的转义模板,go,go-templates,html-escape-characters,Go,Go Templates,Html Escape Characters,我想打印用户列表,如:,这是我公司内部的一种内部格式,但golang模板总是转义,如果要这样做,请使用文本/模板。以下是文档的一部分,以便更好地理解每一部分: 戈多克: 此软件包包装了软件包文本/模板,因此您可以共享其模板API以安全地解析和执行HTML模板 tmpl, err := template.New("name").Parse(...) // Error checking elided err = tmpl.Execute(out, data) 如果成功,tmpl
,这是我公司内部的一种内部格式,但golang模板总是转义,如果要这样做,请使用文本/模板。以下是文档的一部分,以便更好地理解每一部分:
戈多克:
此软件包包装了软件包文本/模板,因此您可以共享其模板API以安全地解析和执行HTML模板
tmpl, err := template.New("name").Parse(...)
// Error checking elided
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", "<script>alert('you have been pwned')</script>")
使用该包而不是html/模板包。哦,谢谢,goland自动导入html/模板
包,更改为text/template
已解决。
<@user1> <@user2>
tmpl, err := template.New("name").Parse(...)
// Error checking elided
err = tmpl.Execute(out, data)
import "text/template"
...
t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
err = t.ExecuteTemplate(out, "T", "<script>alert('you have been pwned')</script>")
Hello, <script>alert('you have been pwned')</script>!
import "html/template"
...
t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
err = t.ExecuteTemplate(out, "T", "<script>alert('you have been pwned')</script>")
Hello, <script>alert('you have been pwned')</script>!