Dans les modèles HTML, l'affichage des nouvelles lignes nécessite une certaine attention, car ils peuvent être échappés par le modèle vers
, les faisant apparaître sous forme de balises HTML littérales au lieu de sauts de ligne. Cela pose un problème lors du chargement d'un fichier texte contenant des nouvelles lignes et de sa transmission à des modèles HTML.
La solution couramment proposée consiste à remplacer le caractère de nouvelle ligne (n) par
dans la chaîne chargée. Cependant, cette approche peut conduire à des failles de sécurité, car elle permet aux attaquants d'injecter du code malveillant via le caractère " dans , échappant ainsi à la protection XSS.
Une alternative consiste à utiliser template.HTMLEscape() pour désinfectez le texte avant d'effectuer la substitution de nouvelle ligne à
. Cette méthode échappe aux caractères potentiellement dangereux, garantissant ainsi la sécurité des données du modèle.
Voici un exemple illustrant cette technique :
<code class="go">import ( "html/template" "os" "strings" ) const page = `<!DOCTYPE html>\n<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)) }</code>
Une fois exécuté, le résultat apparaîtra comme :
<code class="html"><!DOCTYPE html> <html> <head> </head> <body> <p>first line<br><script>dangerous</script><br>last line</p> </body> </html></code>
En résumé, transmettre du texte nettoyé aux modèles HTML peut prévenir efficacement les vulnérabilités XSS tout en permettant l'affichage correct des nouvelles lignes.
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!