Mustache html模板的安全问题

时间:2015-10-22 17:47:39

标签: javascript html security web-applications mustache

我有一个用例,其中胡须HTML模板的内容可能来自应用程序/最终用户(即下面代码片段中脚本标记的内容。)

<script id="template" type="x-tmpl-mustache">
  Hello {{ name }}!
</script>

由于这可能导致恶意代码的执行,我正在做

  1. 仅允许添加HTML标记和属性的子集 模板(在脚本标记内)
  2. 仅允许HTML转义 变量,即只允许{{name}},而不是{{{name}}}。
  3. 为了应用程序的安全性还有什么需要考虑的事项吗?

2 个答案:

答案 0 :(得分:4)

如果我们遵循“小而敏锐的工具”这一理念,我认为这不是一个“小胡子”的问题。然后在将不安全数据(第三方JSON)映射到模板之前,您将使用其他工具验证数据。

最简单的方法是替换字符串字段,包含不安全的数据。

function clearJson(userStringData){

  return JSON.parse(userStringData, function(k,v) { 
        // string values containg something like
        // html tags or js block braces will not pass
        return String(v).match('[<>{}]') ? 'UNSAFE' : v;
  });
}

代码注入领域太宽,无法对您的问题做出简短回答。您可以应用任何足以满足您应用程序的方法:定义应用程序期望的用户数据格式,然后在运行时删除与这些格式不匹配的传入可疑数据。

答案 1 :(得分:1)

您应该在服务器上执行user inputs,而不是在客户端上执行“仅”。如果某个“坏代码”将在客户端上执行,那已经太晚了;)