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

时间:2013-01-14 08:53:54

标签: node.js express

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

喜欢:require方法

我想限制使用require方法。 我不希望任何节点应用程序访问我的节点框架中的“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);
}

我希望这个控制台打印undefined;

并在此示例中

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

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

提前致谢

3 个答案:

答案 0 :(得分:0)

你为什么要这样做?

无法更改require的工作方式,因为它是内置的node.js函数。

答案 1 :(得分:0)

我创建一个新功能,就像需要一样。

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

当有人提交代码时,您会在顶部附加var require;,以防止他们使用常规require。或者您在提交中进行搜索,只有在不包含requireeval的情况下才会批准。

答案 2 :(得分:0)

试用this库, 有关其安全性如何工作的详细信息,请参阅README:

  

Node.js子进程由Jailed库创建;

     

subprocess(down)将包含不受信任代码的文件加载为   string(或者,如果是DynamicPlugin,只使用提供的字符串   用代码)

     

然后“使用严格”;被附加到该代码的头部(为了...   使用arguments.callee.caller);

防止破坏沙箱      

最后使用vm.runInNewContext()方法执行代码,其中   提供的沙箱只暴露了一些基本方法   setTimeout()和用于消息传递的应用程序对象   申请网站。