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

HTML テンプレートで改行を `` に安全に置き換えるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 07:46:02403ブラウズ

How to safely replace newlines with `` in HTML templates?

改行を
に置き換えます。 HTML テンプレート内

HTML テンプレートで改行を表示するには、いくつかの考慮が必要です。テンプレートによって改行が
にエスケープされ、改行ではなくリテラルの HTML タグとして表示される可能性があるためです。これは、改行を含むテキスト ファイルをロードして HTML テンプレートに渡すときに問題を引き起こします。

一般的に提案されている解決策には、改行文字 (n) を
に置き換えることが含まれます。ロードされた文字列内。ただし、このアプローチでは、攻撃者が の " 文字を通じて悪意のあるコードを挿入し、XSS 保護を回避できるため、セキュリティ上の脆弱性が発生する可能性があります。

1 つの代替案は、template.HTMLEscape() を利用して、 newline-to-

置換を実行する前にテキストをサニタイズします。このメソッドは潜在的に危険な文字をエスケープし、テンプレート データの安全性を確保します。

この手法を示す例は次のとおりです。
<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>

実行すると、出力は次のように表示されます:
<code class="html"><!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <p>first line<br><script>dangerous</script><br>last line</p>
  </body>
</html></code>

要約すると、サニタイズされたテキストを HTML テンプレートに渡すと、改行を正しく表示しながら XSS 脆弱性を効果的に防ぐことができます。

以上がHTML テンプレートで改行を `` に安全に置き換えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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