繁体   English   中英

保护Node.js

[英]Securing Node.js

PHP使限制用户在服务器上可以执行的操作相对容易-只需通过php.ini disable_functions指令指示它禁用功能即可。 Node.js中有类似的功能吗? 谷歌搜索更明显的短语已经变成了空白。 我想象一个人可以通过只控制可以进入require子句的内容来做类似的事情。 但是,也许还有另一种方法? 我将非常荣幸能够向我指出正确方向的任何人。


从评论来看,我需要澄清这个问题

  1. 上下文 -我正在设置一项服务,该服务允许用户在Docker容器中运行自己的Node代码。 Docker容器是相当安全的,但是-正如Docker明确指出的--没有铸铁保证该容器是一个沙箱,没有任何溢出的危险。
  2. 在一定程度上,我想允许用户使用使用标准Node require('modulename')语法在其代码中声明其用途的外部模块

现在假设我让这种情况发生了,并且用户坚持了下来

require('shelljs/global');

Boom ...用户可以运行Shell命令。 那么如何阻止这种情况发生呢? 一种方法是扮演警察并严格控制用户可以以此方式系紧哪些外部模块。 另一个-因此也是我的问题-是否有一种php.ini样式的方法简单地阻止对某些功能的访问...。 根据我对Node工作原理的理解(目前还不完善),这是不可能的。 但是,考虑到我是一个相对较新的人,我想我会在这里问一下,看看那些比我更了解Node的人要说些什么。

我不确定您的意思,但是您可以控制从模块导出中导出的内容。 例如:

var DB = require("db");

var userFromDB = DB.find("username");

modules.exports = {
    publicUser: userFromDB.publicData
}

我们只将userFromDB.publicData公开,而不是整个userFromDB对象。 公众中没有人可以访问其他任何内容。

防止一个攻击角度的一种方法是,在运行node.js之前,将外壳程序中的全局node_modules路径文件夹设置为与默认文件夹不同的文件夹。

然后,您可能会遇到一些实际需要全局模块的应用程序的问题,但是您可以通过npm link它们或类似的模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM