Rails终端用户模板引擎:Liquid vs Mustache vs其他?

15

我正在创建一个服务,希望允许终端用户编辑HTML模板,以便在模板中访问特定的“变量”。

我知道Liquid是为此目的而设计的,相对而言比较安全,并且被广泛生产使用。但是,与Mustache之类的语言相比,我认为它对终端用户来说相当复杂。

Mustache听起来很棒,但我担心安全问题... 它是否曾经用于终端用户模板?

基本上,我正在寻找一种可以用于Rails的模板引擎,适用于终端用户,具备以下特点:

  1. 安全 - 不会允许用户执行代码... 至少不在服务器上。 用户将被允许插入客户端javascript。
  2. 功能强大 - 允许终端用户使用提供的“变量”创建几乎任何想象出的网页,并符合#1的上下文
  3. 简单 - 语法明确,易于终端用户应用
  4. 如果支持在javascript和其他语言中呈现模板语法,则奖励点。

Liquid满足#1&2,但不满足3-4。 Mustache满足2-4,但我不确定#1,并且这是不可协商的。

非常感谢任何见解,经验或评论。

1个回答

5

Mustache非常适合插值操作,如果你将其用于Javascript评估,我无法想象它会让你遭受服务器端漏洞的威胁。这是最简单、最强大的选项。我不确定非程序员是否能够理解它,但我肯定它比Liquid更简单。

另一个选择是使用现有的更简单的用户标记集,例如BBcode或富文本编辑库,如TinyMCE。这些功能大为减少,但对普通人来说更容易使用。


1
我真的需要在服务器端进行渲染,有两个原因:
  1. 谷歌和其他搜索机器人需要能够索引已经展开“变量”的完整渲染页面
  2. 尽管启用JS现在相当普遍,但我不想将其作为应用程序的要求。
- marcusmateus
5分钟?@Winfield 需要澄清#1。我不担心模板中的未转义字符串,因为我允许在模板中使用JS...这在另一个论坛上提到过。但是,我真的需要在服务器端进行呈现,有两个原因:
  1. Google和其他搜索机器人需要能够索引已经扩展了“变量”的完整呈现页面
  2. 尽管现在启用JS相当普遍,但我不想将其作为应用程序的要求。
我同意BBcode / TinyMCE更简单,但使用它们确实会削弱应用程序的功能(#2)
- marcusmateus
只要您小心呈现的方法,我认为Mustache将是安全的,并且可以完美地满足您的需求。它的语法并不可怕;就模板引擎而言,这可能是最简单的了。请查看演示作为示例。 - Michelle Tilley
3
Winfield,我接受了你的答案,因为我认为它基本上是正确的,使用Mustache的安全风险似乎很小。不幸的是,在我的测试中,使用Mustache作为终端用户模板引擎所允许的灵活性有限。例如,当我需要仅显示第一个结果中的元素时,除非在服务器上提供逻辑,否则我找不到Mustache语法来实现。然而,切换到Liquid非常容易,并且至今为止提供了我所需的终端用户功能...即使具有稍微不太直观的语法。 - marcusmateus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接