javascript - Node.js 进程内 jsRender 的安全问题

标签 javascript node.js security eval jsrender

我有像聊天这样的node.js应用程序,我需要制作类似于模板的东西。因此任何用户都可以制作自己的模板,稍后渲染。

所以我有两种方法:

  1. 我可以使用常规字符串替换并将预定义参数替换为实际值

  2. 我可以使用 jsRender 并且只允许用户指定禁用代码执行的 jsRender 模板。

我更喜欢第二种方法,因为它更灵活,但我担心用户可能会指定一些邪恶的JavaScript代码,这些代码将由服务器端的jsRender执行,并且可能会泄漏数据。

那么 jsRender 可以安全地在 Node.js 服务器上运行并允许用户指定将在服务器端执行的自己的模板吗?

最佳答案

JsRender 的设计目的是让用户定义的模板无法运行任意代码。

当然,您必须将 allowCode 设置选项保留为其默认值 false(请参阅 http://www.jsviews.com/#settings/allowcodehttp://www.jsviews.com/#allowcodetag@tmpl )。

用户可以在模板中包含丰富的模板表达式,但他们无法插入访问模板范围之外的任何变量(或运行任何方法)的代码。他们只能访问上下文数据/模型,使用标准运算符,并使用您(作者)决定提供的任何辅助方法和变量。

关于javascript - Node.js 进程内 jsRender 的安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531672/

相关文章:

ruby-on-rails - Stripe 托管帐户 - 错误的国家/地区

c - 推荐的 Bcrypt C 实现是什么?

javascript - SproutCore 的特定 URL

javascript - 需要帮助通过 JavaScript 和 JQuery 创建基于点击的表单元素

javascript - 多于一个元素的classList.toggle问题

Node.js 作为网关

c# - 使用 TLS 将 M2Mqtt.MqttClient 连接到 Mosquitto 代理时获取 AuthenticationException

javascript - 修改 onHeadersReceived 上的 header

node.js - 如何让多个 Node.js 命令行进程相互通信?

javascript - 在客户端 HTML\JS 脚本中嵌入服务器标签,无需模板引擎