模板不必要地转义`<`到`<`而不是'>`

时间:2018-01-30 17:20:29

标签: go escaping go-templates

我使用开发工具,该工具使用模板生成自述文件和许可证等文件。

除了<字符的一个实例变为&lt;之外,一切正常,相应的>字符工作正常,并在输出中按预期显示。

模板文件:https://raw.githubusercontent.com/Southclaws/pawn-package-template/master/README.md感兴趣的行是:

```pawn
#include <{{.Repo}}>
```

插入Repo时,预期结果为

#include <sometext>

但实际出来的是:

#include &lt;sometext>

我无法弄清楚为什么会发生这种情况。老实说这似乎是一个错误,因为如果它要寻找逃避的东西,肯定会将>转变为&gt;,对吗?

1 个答案:

答案 0 :(得分:8)

html/template提供自动,上下文敏感的转义,以防止代码注入:

  

HTML模板将数据值视为纯文本,应对其进行编码,以便将它们安全地嵌入到HTML文档中。转义是上下文的,因此动作可以出现在JavaScript,CSS和URI上下文中。

html/template仅用于生成HTML输出:

  

它提供与包文本/模板相同的界面,只要输出为HTML ,就应该使用它来代替文本/模板

如果输出不是HTML,请使用text/template而不是数据转义。