Go HTML テンプレートの "ZgotmplZ" について
Go HTML テンプレートを使用する場合、出力として謎の文字列 "ZgotmplZ" が表示される場合があります。 。この独特の値には、注意が必要な特定の意味があります。
ZgotmplZ が表示される理由
「ZgotmplZ」は、実行時に安全でない可能性のあるコンテンツが CSS または URL コンテキストに入ると表示されます。これは、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>
テンプレート出力のセキュリティ保護
テンプレート出力の安全性を確保するには、「funcMap」を利用して「attr」と「safe」を実装します。 " 関数:
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>`, }) }
この変更されたコードの結果は次のようになります出力:
<option selected="selected">test</option> <option selected="selected">option</option>
結論
「ZgotmplZ」の重要性を理解し、「attr」関数と「safe」関数を実装することで、Go を確実に実行できます。 HTML テンプレートは安全でセキュアな出力を生成し、脆弱性のリスクを最小限に抑え、アプリケーションの整合性を維持します。
以上がGo HTML テンプレートが「ZgotmplZ」を出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。