node.js - 在 node.js 中,我将如何遵循最小特权原则?

标签 node.js security

想象一个执行两个主要功能的网络应用程序:

  1. 从需要更高读取权限的文件中提供数据
  2. 从需要较低权限才能读取的文件中提供数据

我的假设:要允许读取这两个文件,我需要使用可以读取这两个文件的帐户来运行 Node 。

如果 Node 在可以访问这两个文件的帐户下运行,那么由于 Web 应用程序代码中的安全漏洞,不应读取任何需要更高权限的文件的用户可能会读取这些文件。这将导致灾难性的后果在我想象的 Web 应用程序世界中

理想情况下, Node 进程可以使用最少的权限运行,然后在访问系统资源之前临时提升这些权限。

问题: Node 可以临时提升权限吗?或者有更好的方法吗?

如果没有,我正在考虑运行两台不同的服务器(一台权限较高,一台权限较低),然后将它们都放在代理服务器后面,代理服务器在转发请求之前进行身份验证/授权。

谢谢。

最佳答案

这确实是一个棘手的案例。最后,文件权限是一种元数据。我的建议不是直接访问文件,而是以数据库表的形式在文件之间有一些层,或者任何可以将用户类型映射到文件的东西,如果文件存在,则将文件流式传输给用户。

这意味着所谓的网络应用程序不能简单地规避文件系统权限。您甚至可以对其进行设置,使上述文件没有服务器可读权限,而只能由中间层读取。它所能做的就是调用电话,看看具有给定权限的用户是否可以访问这些文件。如果您愿意,这还可以让您在多个 Web 应用程序之间共享。此外,由于中间层的作用非常特殊,您可以强制执行一组非常有限的调用。

现在,如果权限较低的用户以某种方式获得了权限较高的用户帐户的访问权限,他们将能够看到该文件,并且除了锁定用户帐户之外没有其他办法真正解决这个问题。然而,这是开发过程的一部分。

关于node.js - 在 node.js 中,我将如何遵循最小特权原则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010211/

相关文章:

java - 如何使用oauth获取电子邮件ID

linux - 运行在 Docker 中的进程可以在没有 -v 选项的情况下访问容器外的数据吗?

Apache Openssl 压缩

java - 为什么需要 `java.lang.SecurityException: Prohibited package name: java`?

javascript - 如何通过nodemailer发送邮件

javascript - Express body-parser req.body with formdata 是空对象

c++ - 如何在 NodeJs native 插件中使用非包装 C++ 对象的 std::map

javascript - 如何从 findOneAndUpdate 方法中获取更新的文档?

java - Spring-AOP Before Advice 的条件行为

mysql - 如何在查询语句之外从mysql查询中获取值?