node.js 进程中 jsRender 的安全问题
Security concerns for jsRender inside node.js process
我有 node.js 聊天应用,我需要做一些类似于模板的东西。所以任何用户都可以制作自己的模板,稍后将呈现。
所以我有两个方法:
我可以使用常规字符串替换并将预定义参数替换为实际值
我可以使用 jsRender
并且只允许用户指定 jsRender
禁用代码执行的模板。
我更喜欢第二种方法,因为它更灵活,但我担心用户可能会指定一些邪恶的 javascript 代码,这些代码将由服务器端的 jsRender 执行,它可能会泄漏数据。
那么 jsRender
对 node.js 服务器上的 运行 是否安全,并允许用户指定将在服务器端执行的自己的模板?
JsRender 旨在使用户定义的模板无法 运行 任意代码。
您当然必须将 allowCode 设置选项保留为默认值 false(参见 http://www.jsviews.com/#settings/allowcode and http://www.jsviews.com/#allowcodetag@tmpl)。
用户可以在模板中包含丰富的模板表达式,但他们无法插入访问模板范围之外的任何变量(或 运行s 任何方法)的代码。他们只能访问上下文 data/model,使用标准运算符,并使用您(作者)决定提供的任何辅助方法和变量。
我有 node.js 聊天应用,我需要做一些类似于模板的东西。所以任何用户都可以制作自己的模板,稍后将呈现。
所以我有两个方法:
我可以使用常规字符串替换并将预定义参数替换为实际值
我可以使用
jsRender
并且只允许用户指定jsRender
禁用代码执行的模板。
我更喜欢第二种方法,因为它更灵活,但我担心用户可能会指定一些邪恶的 javascript 代码,这些代码将由服务器端的 jsRender 执行,它可能会泄漏数据。
那么 jsRender
对 node.js 服务器上的 运行 是否安全,并允许用户指定将在服务器端执行的自己的模板?
JsRender 旨在使用户定义的模板无法 运行 任意代码。
您当然必须将 allowCode 设置选项保留为默认值 false(参见 http://www.jsviews.com/#settings/allowcode and http://www.jsviews.com/#allowcodetag@tmpl)。
用户可以在模板中包含丰富的模板表达式,但他们无法插入访问模板范围之外的任何变量(或 运行s 任何方法)的代码。他们只能访问上下文 data/model,使用标准运算符,并使用您(作者)决定提供的任何辅助方法和变量。