flawopen.com/xss/Go
Learn how to fix Cross-Site Scripting (XSS) (CWE-79) in Go. Side-by-side vulnerable vs secure code examples for html/template contextual escaping and Gin responses.
Stellen Sie sich vor, jemand heftet einen Zettel an das schwarze Brett im Flur mit dem Text: 'Jeder, der dies liest, muss seine Brieftasche dem Nächsten übergeben'. Wenn die Passanten jedem Zettel blind gehorchen würden, könnte jeder Zettelschreiber das Geld aller Besucher stehlen.
Web Application SecurityCWE-79 betroffen ist.CWE-79Defense-in-DepthEin Angreifer fügt HTML-Elemente oder JavaScript-Code (z. B. <script> oder <img onerror=...>) in Eingabefelder oder URLs ein.
Die Webanwendung gibt die Eingabe direkt in der HTML-Antwort aus, ohne kontextgerechtes HTML-Entity-Encoding anzuwenden.
Wenn ein Opfer die Seite aufruft, führt der Browser den eingeschleusten Code mit den Rechten der Website aus.
Das Skript stiehlt Authentifizierungs-Cookies, liest den localStorage aus oder führt Aktionen im Namen des Nutzers durch.
// text/template does no HTML escaping
import "text/template"
t := template.Must(
template.New("w").Parse(
"<div>Welcome, {{.}}</div>"))
t.Execute(w, name)
// html/template escapes by context
import "html/template"
t := template.Must(
template.New("w").Parse(
"<div>Welcome, {{.}}</div>"))
t.Execute(w, name)