Échapper aux nouvelles lignes dans les modèles HTML
Lors du chargement d'un fichier texte avec des nouvelles lignes dans des modèles HTML, il est essentiel de prendre des précautions contre les scripts intersites (XSS). Idéalement, n caractères devraient être remplacés par
balises pour conserver les sauts de ligne dans le navigateur. Cependant, la substitution directe des caractères peut entraîner l'échappement du modèle en tant qu'entités HTML
, qui ne s'afficheront pas comme prévu.
Solution utilisant template.HTMLEscape()
Pour éviter le problème tout en conservant la protection XSS, pensez à utiliser d'abord la fonction template.HTMLEscape() pour nettoyer le texte. Cette fonction échappe aux caractères dangereux avant de remplacer n par
.
Exemple :
<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>
Sortie dans le navigateur :
<code class="html">first line <script>dangerous</script> last line</code>
En échappant le texte avant la substitution, le modèle restitue correctement les sauts de ligne tout en protégeant contre les attaques XSS.
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!