Heim >Backend-Entwicklung >Golang >Wie gehe ich sicher mit Zeilenumbrüchen in HTML-Vorlagen um?

Wie gehe ich sicher mit Zeilenumbrüchen in HTML-Vorlagen um?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 20:59:02730Durchsuche

How to Handle Newlines in HTML Templates Safely?

Neue Zeilen in HTML-Vorlagen maskieren

Beim Laden einer Textdatei mit Zeilenumbrüchen in HTML-Vorlagen ist es wichtig, Vorsichtsmaßnahmen gegen Cross-Site-Scripting zu treffen (XSS)-Angriffe. Idealerweise sollten n Zeichen durch
ersetzt werden. -Tags, um Zeilenumbrüche im Browser beizubehalten. Das direkte Ersetzen der Zeichen kann jedoch dazu führen, dass die Vorlage sie als HTML-Entitäten
maskiert, die nicht wie beabsichtigt gerendert werden.

Lösung mit template.HTMLEscape()

Um das Problem zu vermeiden und gleichzeitig den XSS-Schutz aufrechtzuerhalten, sollten Sie zunächst die Funktion template.HTMLEscape() verwenden, um den Text zu bereinigen. Diese Funktion maskiert gefährliche Zeichen, bevor sie n durch
ersetzt.

Beispiel:

<code class="go">package main

import (
    "html/template"
    "os"
    "strings"
)

const page = `<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>{{.}}</p>
  </body>
</html>`

const text = `first line
<script>dangerous</script>
last line`

func main() {
    t := template.Must(template.New("page").Parse(page))
    safe := template.HTMLEscapeString(text)
    safe = strings.Replace(safe, "\n", "<br>", -1)
    t.Execute(os.Stdout, template.HTML(safe)) // template.HTML encapsulates a known safe HTML document fragment.
}</code>

Ausgabe im Browser:

<code class="html">first line
<script>dangerous</script>
last line</code>

Durch das Escapen des Textes vor der Ersetzung stellt die Vorlage Zeilenumbrüche korrekt dar und schützt gleichzeitig vor XSS-Angriffen.

Das obige ist der detaillierte Inhalt vonWie gehe ich sicher mit Zeilenumbrüchen in HTML-Vorlagen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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