Javascript 防止来自特定文件夹中模块的相对require调用
这听起来很奇怪,但我希望特定目录中的所有模块都只能从node_模块中获取资源,而不能从应用程序的任何其他部分获取资源 在特定目录中:Javascript 防止来自特定文件夹中模块的相对require调用,javascript,node.js,Javascript,Node.js,这听起来很奇怪,但我希望特定目录中的所有模块都只能从node_模块中获取资源,而不能从应用程序的任何其他部分获取资源 在特定目录中: require('fs')——应该可以工作 require('../../something')--拒绝 require(“./另一个”)--拒绝 在节点中远程执行类似的操作吗?您可以创建一个模块,该模块将充当require代理: module.exports.require2 = function() { if (arguments[0][0] !=
——应该可以工作require('fs')
--拒绝require('../../something')
--拒绝require(“./另一个”)
在节点中远程执行类似的操作吗?您可以创建一个模块,该模块将充当require代理:
module.exports.require2 = function() {
if (arguments[0][0] !== '.') {
return require.apply(this, arguments);
} else {
throw new Error('Can\'t require relative modules');
}
}
当然,这将由开发人员选择加入:
var require2 = require('require2');
var fs = require2('fs'); //everything's good
var fss = require2('./fss'); //throws an error
与thlorenz的想法类似。这似乎是一件奇怪的事情,但如果你能解释你的理由,那么有人可能会提出更好的建议。如果您运行的是不受信任的代码,那么
require
是您最不担心的问题…肯定很奇怪。有人反对内部化某些模块,因为“人们可能会进行相对的require调用”(从而创建特定的代码,而不是独立的模块)。虽然我认为将他们转移到那里对组织/应用程序来说是有意义的,但另一方担心开发人员会做一些愚蠢的事情。显然,不可信的不是代码,而是开发人员编写的。您是否可以(在您的vcs中)创建一个预接收挂钩,搜索类似于/require\('.*/g
的内容并拒绝提交(附带一条有用的消息)如果它找到了?这样,您仍然可以执行此规则,而不必让node持续工作来执行它。@MichaelTang是一个可靠的建议。我一定会研究这个问题。