Node.js 限制节点JS中的作用域

Node.js 限制节点JS中的作用域,node.js,managed,node-modules,Node.js,Managed,Node Modules,我想让用户为我在NodeJS中编程的一个应用程序创建自定义插件 我想使用一些类似于动态库的方法,但是使用节点模块。问题在于,我们不希望用户能够做一些有害的事情,比如不恰当地使用网络或访问文件系统 是否有任何方法可以限制特定模块的节点本机API?解决方案之一是重新编译节点,而不需要不必要的API调用 实现这一点的另一种方法是在进程启动后对不需要的调用和不需要的模块进行修补 > var fs = require("fs"); > fs.openSync("/etc/passwd", 0)

我想让用户为我在NodeJS中编程的一个应用程序创建自定义插件

我想使用一些类似于动态库的方法,但是使用节点模块。问题在于,我们不希望用户能够做一些有害的事情,比如不恰当地使用网络或访问文件系统


是否有任何方法可以限制特定模块的节点本机API?

解决方案之一是重新编译节点,而不需要不必要的API调用

实现这一点的另一种方法是在进程启动后对不需要的调用和不需要的模块进行修补

> var fs = require("fs");
> fs.openSync("/etc/passwd", 0);
12
> fs.openSync = function(){}
> var fs = require("fs");
> fs.openSync("/etc/passwd", 0);
'Not allowed'

您还必须以同样的方式使用monkey patch
require.reload
,并考虑如何避免这种情况。

如果您授予某人代码执行级别的服务器访问权限,我怀疑是否有任何真正的防御措施。在最好的情况下,你将在一场军备竞赛中试图填补发现的漏洞


如果您想让客户扩展产品的功能,您可能只需要为客户产品开发一个API来与之交互。这样,就有一个有限的攻击表面积,您可以控制应用程序的所有访问点。

我了解如何做到这一点:诀窍是使用with操作符

例如,您可以使用以下命令限制对浏览器中某些API的访问:

with({windows: null, document: null: XMLHttpRequest: null}){
    console.log(document)
}