安全问题与Mustache html模板

Arj*_*jun 5 html javascript security web-applications mustache

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

<script id="template" type="x-tmpl-mustache">
  Hello {{ name }}!
</script>
Run Code Online (Sandbox Code Playgroud)

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

  1. 仅允许在模板中添加HTML标记和属性的子集(在脚本标记内)
  2. 仅允许HTML转义变量,即仅允许{{name}},而不允许{{{name}}}.

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

diz*_*iaq 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;
  });
}
Run Code Online (Sandbox Code Playgroud)

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