关于Mustache html模板的安全问题

Security concerns with Mustache html templating

本文关键字:安全 问题 Mustache html 关于      更新时间:2023-09-26

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

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

由于这可能会导致执行恶意代码,所以我正在执行

  1. 只允许添加HTML标签和属性的子集模板(在script标签内)
  2. 只允许HTML转义变量,即只允许{{name}}而不允许{{{name}}}。

对于应用程序的安全性还有什么需要考虑的吗?

我认为如果我们遵循"小而锋利的工具"的理念,这不是一个"胡子"的问题。然后,在将不安全数据(第三方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;
  });
}

代码注入的领域太广,无法对您的问题给出简短的回答。你可以采用任何对你的应用程序来说足够高级的方法:定义应用程序期望从用户那里得到的数据格式,然后在运行时删除传入的不匹配这些格式的可疑数据。

您应该在服务器上执行user inputs,而不是"仅"在客户端上执行。如果要在客户端执行一些"坏代码",那已经太迟了;)