HTML テンプレートでの改行のエスケープ
改行を含むテキスト ファイルを HTML テンプレートにロードする場合は、クロスサイト スクリプティングに対する予防措置を講じることが不可欠です(XSS) 攻撃。理想的には、n 個の文字を
に置き換える必要があります。タグを使用してブラウザ内で改行を保持します。ただし、文字を直接置換すると、テンプレートが文字を HTML エンティティ
としてエスケープする可能性があり、意図したとおりに表示されなくなります。
template.HTMLEscape() を使用した解決策
XSS 保護を維持しながら問題を回避するには、最初に template.HTMLEscape() 関数を使用してテキストをサニタイズすることを検討してください。この関数は、n を
に置き換える前に危険な文字をエスケープします。
例:
<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>
ブラウザでの出力:
<code class="html">first line <script>dangerous</script> last line</code>
置換前にテキストをエスケープすることで、テンプレートは XSS 攻撃から保護しながら改行を正しくレンダリングします。
以上がHTML テンプレートで改行を安全に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。