我正在尝试为我的Kubernetes群集实现自定义default-http映像。我只有2个要求:
只要符合以下条件,任何图片都是允许的:
截至目前,我得到的是:
1 package main
2
3 import (
4 "fmt"
5 "net/http"
6 "html/template"
7 )
8
9 func main() {
10 http.HandleFunc("/healthz", healhtzHandler)
11 http.HandleFunc("/",errorHandler)
12 http.ListenAndServe(":8000", nil)
13 }
14
15 func healhtzHandler(w http.ResponseWriter, r *http.Request) {
16 fmt.Fprint(w, "Really healthy")
17 }
18
19 type Person struct {
20 UserName string
21 }
22
23 func errorHandler(w http.ResponseWriter, r *http.Request) {
24 w.WriteHeader(404)
25 t := template.New("fieldname example")
26 t, _ = t.Parse("<h2>hello {{.UserName}}!</h2>")
27 p := Person{UserName: "Astaxie"}
28 t.Execute(w, p)
29 }
这一切都按预期工作,除了我的主要目标是显示一个很酷的404错误页面,所以我需要使用Bootstrap,酷标签等。但是这段代码总是执行{{1}内的模板} tag。
<pre></pre>
它破坏了我想做的一切。我该如何解决这个问题?
答案 0 :(得分:1)
基于此documentation for template,我认为您可能希望使用“text / template”而不是“html / template”。
那页说:
html / template中的上下文自动转换可生成安全的转义HTML输出
虽然:
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>!