İçeriğe geç

Şablon Enjeksiyonu (ARCH5130)

Anahtar go.security.template-injection · Önem error · Kategori security · CWE CWE-1336

Şablon metninin kendisini kullanıcı girdisinden oluşturmak, saldırganların şablon direktifleri enjekte etmesine (SSTI) ve sunucuda kod çalıştırmasına olanak tanır.

func render(w http.ResponseWriter, r *http.Request) {
src := "Merhaba " + r.URL.Query().Get("name")
t := template.Must(template.New("p").Parse(src))
t.Execute(w, nil)
}
var tmpl = template.Must(template.New("p").Parse("Merhaba {{.Name}}"))
func render(w http.ResponseWriter, r *http.Request) {
tmpl.Execute(w, struct{ Name string }{r.URL.Query().Get("name")})
}

Şablonları sabit kaynaklardan derleyin; kullanıcı girdisini şablon metnine değil, yalnızca veri olarak geçirin.