如何限制节点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);
}
我希望这个控制台能够打印功能;
提前致谢
答案 0 :(得分:0)
你为什么要这样做?
无法更改require的工作方式,因为它是内置的node.js函数。
答案 1 :(得分:0)
我创建一个新功能,就像需要一样。
requireSafe = function(param){
if(!isAllowedLogic(param)) return null;
else return require(param);
}
当有人提交代码时,您会在顶部附加var require;
,以防止他们使用常规require
。或者您在提交中进行搜索,只有在不包含require
或eval
的情况下才会批准。
答案 2 :(得分:0)
试用this库, 有关其安全性如何工作的详细信息,请参阅README:
Node.js子进程由Jailed库创建;
subprocess(down)将包含不受信任代码的文件加载为 string(或者,如果是DynamicPlugin,只使用提供的字符串 用代码)
然后“使用严格”;被附加到该代码的头部(为了... 使用arguments.callee.caller);
防止破坏沙箱最后使用vm.runInNewContext()方法执行代码,其中 提供的沙箱只暴露了一些基本方法 setTimeout()和用于消息传递的应用程序对象 申请网站。