传递给res.render()的本地人是否足够安全以包含敏感信息?

时间:2018-11-13 21:45:03

标签: express security pug

对于Web开发的服务器端方面,我还是一个新手,我正尝试根据用户的访问权限(即,他是否是管理员)有选择地显示某些元素。我当时正在考虑使用Pug做这样的事情:

<body>
<h1> Header </h1>
if locals.is_admin
    p.admin-only Admin-only Content
</body>

我认为从模板创建页面之后,这些数据就被丢弃了,但是当涉及到安全性时,我比相信我的假设要好得多。那么,这样做安全吗?

2 个答案:

答案 0 :(得分:2)

  

传递给res.render()的本地人是否足够安全以包含敏感信息?

这取决于。传递给res.render()的本地变量只是服务器中的变量,因此它们的漏洞比服务器中的任何其他变量都多。一旦您的代码不再使用它们,并且res.render()已完成其渲染操作,它们就会被JS引擎收集。

“取决于”部分是因为它取决于模板对数据的处理方式。如果模板在呈现的HTML文件中包含任何该数据,则该数据将被发送到客户端,并且肯定以任何方式都不安全。

但是,如果您的呈现逻辑确定用户不是管理员,因此在呈现的HTML文件中不包含任何敏感信息,则该信息将不会离开您的服务器。因此,实际上取决于模板文件中的逻辑,以确定哪些本地变量离开服务器以及将其发送给谁(哪个用户)。这就是您可能或可能遇到的安全问题。您是否安全正确地确定了谁拥有管理特权,您的模板是否使用该确定正确地确定了它不会向错误的用户泄露信息,并且是否向管理员发送了应该发送给他们的数据?

答案 1 :(得分:1)

是的,这样做是安全的,因为传递到模板中的管理数据不会随您提供的条件处理而离开服务器。

未来的风险来自于开发人员将来修改模板以意外地包含它,因为模板中没有保护措施来知道受保护的内容和不受保护的内容。