Heim > Backend-Entwicklung > Golang > Warum erscheint „ZgotmplZ' in der Ausgabe meiner Go-Vorlage und wie kann ich das Problem beheben?

Warum erscheint „ZgotmplZ' in der Ausgabe meiner Go-Vorlage und wie kann ich das Problem beheben?

Linda Hamilton
Freigeben: 2024-12-25 11:46:42
Original
509 Leute haben es durchsucht

Why Does

Problem bei der Vorlagenausgabe: „ZgotmplZ“ verstehen

Beim Rendern von HTML mit Go-Vorlagen kann es sein, dass Sie in Ihrer Ausgabe auf das verwirrende Erscheinungsbild von „ZgotmplZ“ stoßen. Dieser undurchsichtige Wert ergibt sich aus einer Sicherheitsmaßnahme, die zur Laufzeit unsichere Inhalte erkennt, die bestimmte Kontexte wie CSS oder URLs erreichen.

Betrachten Sie dieses Beispiel:

func main() {
    funcMap := template.FuncMap{
        "printSelected": func(s string) string {
            if s == "test" {
                return `selected="selected"`
            }
            return ""
        },

        "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)
}
Nach dem Login kopieren

Diese Vorlage erzeugt Folgendes Ausgabe:

<option ZgotmplZ ZgotmplZ >test</option>
Nach dem Login kopieren

Das Vorhandensein von „ZgotmplZ“ zeigt an, dass der unsichere Inhalt selected="selected" einen CSS-Kontext erreicht hat. Um solche Szenarien zu bewältigen, können Sie Ihrer Vorlagenfunktionszuordnung eine „sichere“ und eine „attr“-Funktion hinzufügen:

    funcMap := template.FuncMap{
        "attr": func(s string) template.HTMLAttr {
            return template.HTMLAttr(s)
        },
        "safe": func(s string) template.HTML {
            return template.HTML(s)
        },
    }
Nach dem Login kopieren

Mit diesen Funktionen können Sie Ihre Vorlage wie folgt ändern:

<option {{.attr | attr}}>test</option>
    {{.html | safe}}
Nach dem Login kopieren

Mit dieser Änderung sieht die Ausgabe wie folgt aus:

<option selected="selected">test</option>
<option selected="selected">option</option>
Nach dem Login kopieren

Diese Lösung stellt sicher, dass unsichere Inhalte ordnungsgemäß maskiert werden, bevor sie in die Ausgabe aufgenommen werden. Sie können auch benutzerdefinierte Funktionen definieren, um Zeichenfolgen in andere Typen wie template.CSS, template.JS und template.URL zu konvertieren, um die Sicherheit zu erhöhen und die Codeorganisation aufrechtzuerhalten.

Das obige ist der detaillierte Inhalt vonWarum erscheint „ZgotmplZ' in der Ausgabe meiner Go-Vorlage und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage