白名单标签免于使用Go的html / template进行转义

将[]字节传递到模板中,作为论坛样式的Web应用程序上的消息发布的正文。在模板中,调用一个方法以转换为字符串,然后切换所有换行符以换行:


<p>{{.BodyString}}</p>

...


func (p *Post) BodyString() string {

    nl := regexp.MustCompile(`\n`)

    return nl.ReplaceAllString(string(p.Body), `<br>`)

}

最终结果是:


paragraphs <br> <br>in <br> <br>this <br> <br>post

我不想用HTML(p.Body)传递整个帖子,因为它表示来自潜在不可靠来源的第三方数据。有没有一种方法可以使用香草Go1模板包将某些标签列入格式白名单?


炎炎设计
浏览 311回答 2
2回答

守着星空守着你

我深信模板包对此无能为力。如果您想删除特定的(列入黑名单的)标签(分别是此类标签所包围的子树)或仅允许传递特定的标签(列入白名单的标签),那么我认为大概就是解析并重写html AST是一个很好的解决方案。就是说,人们可以在这里和那里看到一些疯狂的RE试图这样做,但是我不认为这是一个“好的解决方案”,而且我怀疑它们在符合HTML规范的一般情况下是否可以成为“正确的”解决方案,其中包括一些法律上的违规行为,因为它可能不属于常规语法类别问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go