Maison  >  Article  >  développement back-end  >  Comment gérer les nouvelles lignes dans les modèles HTML en toute sécurité ?

Comment gérer les nouvelles lignes dans les modèles HTML en toute sécurité ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 20:59:02620parcourir

How to Handle Newlines in HTML Templates Safely?

É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!

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