1

如何限制节点js中的全局变量和函数?

比如:需要方法

我想限制使用 require 方法。我不希望任何节点应用程序访问我在 express 之上构建的节点框架中的“fs”,它们只能需要我想要的模块。而且我想限制对进程的访问,全局范围。

假设当我为任何应用程序加载任何 js 库时

喜欢:

var x=require('app1.js');

在我的框架中

然后我想确保这个 app1.js 不能使用 require("fs") 访问文件系统

app1.js

var x=require("fs");
exports.hello=function(){
   console.log(typeof x.readSync);
}

我希望这个控制台打印未定义;

在这个示例中

var x=require("helper.js");
exports.hello=function(){
   console.log(typeof x.hello);
}

我希望这个控制台打印功能;

提前致谢

4

3 回答 3

1

我会创建一个新函数,它的作用类似于require。

requireSafe = function(param){
    if(!isAllowedLogic(param)) return null;
    else return require(param);
}

当有人提交代码时,您var require;在顶部附加以防止他们使用常规的require. 或者你在他们的提交中搜索,只有在它不包含requirenor时才批准它eval

于 2014-07-18T14:13:12.747 回答
0

Why would you want to do that?

It is not possible to change the way require works, as it is a build-in node.js function.

于 2013-01-14T10:33:39.380 回答
0

试试这个库,从 README 中了解它的安全性如何工作的一些细节:

Jailed 库创建了一个 Node.js 子进程;

子进程(下载)将包含不受信任代码的文件作为字符串加载(或者,在 DynamicPlugin 的情况下,只需将提供的字符串与代码一起使用)

然后“使用严格”;附加到该代码的头部(为了防止使用 arguments.callee.caller 破坏沙箱);

最后,代码使用 vm.runInNewContext() 方法执行,其中提供的沙箱仅公开一些基本方法,如 setTimeout(),以及用于与应用程序站点进行消息传递的应用程序对象。

于 2016-01-14T12:23:07.057 回答