我想让用户为我在Node JS中编程的应用程序创建自定义插件。
我想过使用一些类似于动态库的方法,但是使用Node Modules。问题是不希望用户能够做出有害的事情,比如不当使用网络或访问文件系统。
有什么方法可以限制特定模块的NODE Native API吗?
答案 0 :(得分:2)
如果您授予某人对您的服务器的代码执行级别访问权限,我怀疑是否有任何真正的防御。在最好的情况下,你会在一次军备竞赛中试图在发现它们时堵塞它们。
如果您希望允许客户扩展产品的功能,您可能应该只为客户产品开发API以进行交互。这样,攻击面积有限,您可以控制应用程序的所有访问点。
答案 1 :(得分:0)
其中一个解决方案是在没有不必要的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'
你必须以同样的方式require.reload
进行补丁,并考虑如何规避这一点。
答案 2 :(得分:-1)
我想到如何做到这一点:诀窍是使用with运算符。
例如,您可以使用以下命令限制对浏览器中某些API的访问:
with({windows: null, document: null: XMLHttpRequest: null}){
console.log(document)
}