【问题标题】:Rails End-User Templating Engines: Liquid vs Mustache vs. Others?Rails 最终用户模板引擎:Liquid vs Mustache vs. 其他?
【发布时间】:2011-02-26 21:40:47
【问题描述】:

我正在创建一项服务,我希望允许最终用户在其中编辑网页的 HTML 模板,允许访问特定的“变量”以包含在模板中。

我知道液体就是为此目的而设计的,它是安全的(至少相对而言),并且在大量生产中使用。但是,与 Mustache 之类的语言相比,我发现该语言对于最终用户来说相当复杂。

Mustache 听起来不错,但我担心安全性……它曾被用于最终用户模板吗?

基本上,我正在寻找一个模板引擎,我可以将其与 Rails 一起用于最终用户:

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

液体满足 1 和 2,但不满足 3-4。小胡子符合 2-4,但我不确定 #1,这是不可协商的。

非常感谢任何见解、经验或 cmets。

【问题讨论】:

    标签: ruby-on-rails ruby templates liquid mustache


    【解决方案1】:

    Mustache 非常适合插值,如果您将它用于 Javascript 评估,我无法想象它会让您暴露于服务器端漏洞。这是最简单、最强大的选择。我不知道非程序员会理解它,但我相信它比 Liquid 更简单。

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

    【讨论】:

    • 我真的需要在服务器端进行渲染,原因有两个: 1. 谷歌和其他搜索机器人需要能够索引已扩展的“变量”的完全渲染页面 2 . 虽然现在启用 JS 相当普遍,但我不想让它成为应用程序的要求
    • 5 分钟?? @Winfield 需要澄清#1。不担心模板中未转义的字符串,因为我允许在模板中使用 JS。它在另一个论坛中被提出来作为关注点。但是,我真的需要在服务器端进行渲染,原因有两个:1.谷歌和其他搜索机器人需要能够索引完全渲染的页面,其中“变量”已经扩展 2.启用 JS 时现在相当普遍 我不想让它成为应用程序的要求 我同意 BBcode / TinyMCE 更简单,但使用它们真的会削弱应用程序的力量(#2)
    • 只要你小心你在视图中公开的方法,我认为 Mustache 将是安全的并且很好地满足你的需求。语法并不可怕;就模板引擎而言,它可能尽可能简单。以the demo 为例。
    • Winfield,我接受了你的回答,因为我认为它基本上是正确的,使用 Mustache 的安全风险似乎很小。不幸的是,在我的测试中,使用 Mustache 作为最终用户模板引擎所允许的灵活性是有限的。例如,当我需要仅显示第一个结果中的元素时,除非我在服务器上提供逻辑,否则我无法找到允许这样做的 Mustache 语法。然而,切换到 Liquid 非常容易,并且提供了我迄今为止所需的最终用户功能......即使语法稍微不那么直观。
    猜你喜欢
    • 2015-12-13
    • 2023-02-06
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2012-05-31
    • 2011-03-15
    • 2018-04-10
    相关资源
    最近更新 更多