保护Node.js

时间:2015-03-18 13:46:24

标签: php node.js security

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


从评论中我需要澄清这个问题

  1. 上下文 - 我正在设置一项服务,允许用户在Docker容器中运行自己的Node代码。 Docker容器相当安全,但是 - 正如Docker所说 - 没有铸铁保证容器是沙盒,没有任何溢出的风险。
  2. 我希望允许用户使用标准Node require(' modulename')语法在其代码中声明其使用的外部模块
  3. 现在假设我发生这种情况并且用户坚持

    require('shelljs/global');
    

    Boom ......用户可以运行shell命令。那么我该如何阻止这种情况发生呢?一种方法是扮演警察并严格控制用户可以通过这种方式绑定的外部模块。另一个 - 也就是我的问题 - 如果有一种简单的阻止访问某些功能的php.ini风格方式....根据我对Node如何工作的理解(并且它还不完美),这是不可能的。然而,鉴于我是一个相对新手,我想我会在这里问一下,看看那些了解Node的人比我说的更好。

2 个答案:

答案 0 :(得分:0)

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

var DB = require("db");

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

modules.exports = {
    publicUser: userFromDB.publicData
}

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

答案 1 :(得分:0)

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

那么你可能会遇到一些实际需要全局模块的应用程序的问题,但你可以npm link或类似的。