Maison >développement back-end >Golang >Pourquoi mon modèle HTML Go affiche-t-il « ZgotmplZ » ?

Pourquoi mon modèle HTML Go affiche-t-il « ZgotmplZ » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 18:59:11291parcourir

Why Does My Go HTML Template Output

Comprendre "ZgotmplZ" dans les modèles Go HTML

Lorsque vous travaillez avec des modèles Go HTML, vous pouvez rencontrer la chaîne énigmatique "ZgotmplZ" en sortie . Cette valeur particulière a une signification spécifique qui exige de l'attention.

Pourquoi ZgotmplZ apparaît

"ZgotmplZ" apparaît lorsqu'un contenu potentiellement dangereux entre dans un contexte CSS ou URL pendant l'exécution. Cela se produit lorsque le HTML est intégré directement dans les attributs CSS ou URL, ce qui peut introduire des failles de sécurité. Pour se protéger contre ces risques, le moteur de modèles insère "ZgotmplZ" comme espace réservé, empêchant ainsi l'exécution du contenu dangereux.

Un exemple d'exemple

Considérez le modèle suivant code :

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)

}

Une fois exécuté, ce modèle produit le sortie :

<option ZgotmplZ ZgotmplZ >test</option>

Sécurisation de la sortie du modèle

Pour garantir la sécurité de la sortie de votre modèle, vous pouvez utiliser "funcMap" pour implémenter les paramètres "attr" et "safe "fonctions :

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>`,
    })
}

Ce code modifié entraîne ce qui suit sortie :

<option selected="selected">test</option>
<option selected="selected">option</option>

Conclusion

En comprenant la signification de "ZgotmplZ" et en implémentant les fonctions "attr" et "safe", vous pouvez vous assurer que votre Go Les modèles HTML produisent une sortie sûre et sécurisée, minimisant le risque de vulnérabilités et préservant l'intégrité de vos applications.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn