使用 Go HTML 模板時,您可能會在輸出中遇到神秘的「ZgotmplZ」。這不是一個簡單的字串,而是一個表示問題的特殊值。
“ZgotmplZ”代表“零值得到 templateZ”,當傳遞不安全內容時會出現到模板中的 CSS 或 URL 上下文。例如,執行以下範本:
<option {{ printSelected "test" }} {{ printSelected "test" | safe }}>test</option>
將輸出:
<option ZgotmplZ ZgotmplZ >test</option>
解決「ZgotmplZ」的關鍵是確保在不安全的上下文中僅使用安全字串。這可以透過將安全函數應用於模板函數的輸出來實現。然而,對於像 selected 這樣的屬性,直接應用 safe 可能會引入 XSS 漏洞。
要解決這個問題,您可以在模板funcMap 中添加自訂attr 函數:
funcMap := template.FuncMap{ "attr": func(s string) template.HTMLAttr { return template.HTMLAttr(s) }, "safe": func(s string) template.HTML { return template.HTML(s) }, }
With有了此函數,您可以如下修改模板:
<option {{.attr | attr}}>test</option> {{.html | safe}}
這確保了屬性值被安全轉義,同時允許HTML內容
透過理解「ZgotmplZ」的目的並採用適當的轉義技術,您可以防止不安全內容到達Go HTML 模板中的不安全上下文,從而保持完整性和您的網路應用程式的安全性。
以上是Go HTML 範本中出現「ZgotmplZ」的原因是什麼以及如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!