HTML中的Unescape css输入

时间:2015-01-12 16:45:50

标签: go go-templates

我如何unescape html?

我将css文件传递给html,就像这样

<style>{{.file}}</style>

我明白了

<style>ZgotmplZ</style>

我尝试使用template.HTML(数据)包装该字段,但没有工作。

1 个答案:

答案 0 :(得分:3)

Go HTML模板包正确地超越了CSS。引自documentation of the template package

  

转义是上下文的,因此动作可以出现在JavaScript,CSS和URI上下文中。

"ZgotmplZ"是一个特殊值,如果您尝试包含的值在上下文中无效或不安全,则将其用作替换值。

所以问题是你试图包含的CSS值,这是不安全的。首先尝试简单的事情,看它是否有效,如:

body {background-color: #000}

在文档中找到"ZgotmplZ"的讨论(类型为ErrorCode),引用它:

"ZgotmplZ"解释:

示例模板:

<img src="{{.X}}">
where {{.X}} evaluates to `javascript:...`

<强>讨论:

"ZgotmplZ" is a special value that indicates that unsafe content reached a
CSS or URL context at runtime. The output of the example will be
  <img src="#ZgotmplZ">
If the data comes from a trusted source, use content types to exempt it
from filtering: URL(`javascript:...`).

解决方案

由于您尝试插入的代码位于CSS代码而非HTML中,因此您不能/不应使用template.HTML(data)

有一个预定义的类型CSS,用于安全地包含来自可信来源的CSS代码,例如:您指定的CSS代码,并非来自用户填写的HTML表单。例如:

var safeCss = template.CSS(`body {background-image: url("paper.gif");}`)

并将safeCss值传递给模板参数。