在 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中文网其他相关文章!