在unsache模板变量中混合unsanitized数据,HTML

时间:2011-11-03 05:28:29

标签: escaping xss mustache

我试图将消息传递给看起来像这样的Mustache模板:

您提供的网址http://example.com无效。

用户指定URL,因此需要转义URL。但是我想在网址周围放置<code>标记,因此它从周围的文本中脱颖而出,因此代码标记需要在不进行转义的情况下传递。

我可以这样写:

{{text_before_url}}<code>{{url}}</code>{{text_after_url}} 

但是,消息的内容各不相同,并不总是适合该结构。

我还可以尝试使用三个大括号{{{messages}}}输出原始文本,并使用类似htmlentities($url)的内容转义URL,但如果有人稍后调整该程序以传递新消息,并通过在数据中没有意识到它必须被转义,那么我们就陷入了巨大的XSS麻烦。

我可能只是运气不好,而且我理解拥有一个简单的模板引擎的价值,但有一些方法我可以告诉Mustache HTML标签是否正常,同时转出其余的输出?

凯文

1 个答案:

答案 0 :(得分:5)

在模板中使用{{variable}} 5&gt; 2将导致5 &gt; 2,其中使用{{{variable}}}(3个胡须)将导致5 > 2

比照。文档:https://github.com/defunkt/mustache#escaping