ホームページ >バックエンド開発 >Golang >HTML テンプレートで改行を安全に処理するにはどうすればよいですか?

HTML テンプレートで改行を安全に処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 20:59:02730ブラウズ

How to Handle Newlines in HTML Templates Safely?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。