首頁 >後端開發 >Golang >為什麼我的 Go HTML 模板輸出'ZgotmplZ”?

為什麼我的 Go HTML 模板輸出'ZgotmplZ”?

Linda Hamilton
Linda Hamilton原創
2024-12-17 18:59:11352瀏覽

Why Does My Go HTML Template Output

理解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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn