理解Go HTML 模板中的「ZgotmplZ」
使用Go HTML 模板時,您可能會遇到神秘的字串「ZgotmplZ ”作為輸出。這個特殊的值具有需要注意的特定意義。
為什麼 ZgotmplZ 出現
當潛在不安全內容在運行時進入 CSS 或 URL 上下文時,「ZgotmplZ」就會出現。當 HTML 直接嵌入到 CSS 或 URL 屬性中時會發生這種情況,這可能會引入安全漏洞。為了防範這些風險,模板引擎插入「ZgotmplZ」作為佔位符,以防止執行不安全的內容。
範例範例
考慮下列範本程式碼:
func printSelected(s string) string { if s == "test" { return `selected="selected"` } return "" } func main() { funcMap := template.FuncMap{ "printSelected": printSelected, "safe": func(s string) template.HTML { return template.HTML(s) }, } template.Must(template.New("Template").Funcs(funcMap).Parse(` <option {{ printSelected "test" }} {{ printSelected "test" | safe }} >test</option> `)).Execute(os.Stdout, nil) }
執行時,此範本會產生輸出:
<option ZgotmplZ ZgotmplZ >test</option>
執行時,此範本會產生輸出:
保護範本輸出func attr(s string) template.HTMLAttr { return template.HTMLAttr(s) } func main() { funcMap := template.FuncMap{ "attr": attr, "safe": func(s string) template.HTML { return template.HTML(s) }, } template.Must(template.New("Template").Funcs(funcMap).Parse(` <option {{.attr | attr}}>test</option> {{.html | safe}} `)).Execute(os.Stdout, map[string]string{ "attr": `selected="selected"`, "html": `<option selected="selected">option</option>`, }) }為了確保範本輸出的安全,您可以使用“funcMap”來實現“attr”和“safe” " 函數:
<option selected="selected">test</option> <option selected="selected">option</option>
此修改後的程式碼結果如下輸出:
結論透過理解「ZgotmplZ」的意義並實作「attr」和「safe」函數,你可以確保你的Go HTML模板可產生安全可靠的輸出,最大限度地降低漏洞風險並保持應用程式的完整性。以上是為什麼我的 Go HTML 模板輸出'ZgotmplZ”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!