用户提供的模板:使用EJS可以安全吗?

时间:2018-08-20 05:30:28

标签: node.js ejs

我想创建一个系统,管理员用户可以使用EJS设置基于HTML的发票,提交该发票,然后使用该EJS生成发票。 为此,我需要他们提交EJS,进行存储,然后在服务器端运行它以生成发票。

我意识到这通常是个坏主意。目前,我正在尽最大努力将安全准则放在编写包含代码的字段中(只有管理员才能更改提交字段,等等)。但是,我意识到具有管理员权限的任何人都可以提交带有恶意代码的模板。问题:

  • EJS至少 meant 安全吗? (即我们,无力require()等)
  • 如果您绝对难以运行用户(或管理员)提供的代码,该怎么办?

1 个答案:

答案 0 :(得分:0)

  

EJS至少意味着安全吗? (即我们,无力执行require()等)

如果您在谈论ejs模板本身,那么(通常来说)它主要影响浏览器端的安全性。 因此,为了澄清起见,您可以将EJS模板作为字符串读取,并使用ejs库中的render方法来创建呈现的html字符串以发送给客户端。因此,除非您依赖该模板中可能影响您安全性的数据,否则它们基本上不会影响服务器。

  

如果您绝对难以运行用户(或管理员)提供的代码,该怎么办?

如果我不得不采用这种方法,我可能会在模板本身上添加一些验证。甚至可以解析DOM检查元素,这取决于任务以及EJS的变化方式。 如果安全性对您来说是重要的问题。您可以在ejs上传时使用一些headless browser来测试ejs,以检查不应该存在的内容(未知的ajax请求或script>标记等)