【发布时间】:2016-08-30 13:24:00
【问题描述】:
我想让用户为我的一个用 Node JS 编程的应用程序创建自定义插件。
我想过使用一些类似于动态库的方法,但使用节点模块。问题是不希望用户能够做有害的事情,例如不当使用网络或访问文件系统。
有什么方法可以限制特定模块的 NODE Native API?
【问题讨论】:
标签: node.js managed node-modules
我想让用户为我的一个用 Node JS 编程的应用程序创建自定义插件。
我想过使用一些类似于动态库的方法,但使用节点模块。问题是不希望用户能够做有害的事情,例如不当使用网络或访问文件系统。
有什么方法可以限制特定模块的 NODE Native API?
【问题讨论】:
标签: node.js managed node-modules
如果您授予某人代码执行级别访问您的服务器的权限,我怀疑是否有任何真正的防御措施。充其量,您将参加一场军备竞赛,试图在漏洞被发现时堵住它们。
如果您想让客户扩展您产品的功能,您可能应该只开发一个 API 供客户产品与之交互。这样,攻击面有限,您可以控制应用程序的所有访问点。
【讨论】:
其中一种解决方案是重新编译节点而不调用不需要的 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 并考虑如何规避此问题。
【讨论】:
我知道如何做到这一点:诀窍是使用 with 运算符。
例如,您可以使用以下方法限制对浏览器中某些 API 的访问:
with({windows: null, document: null: XMLHttpRequest: null}){
console.log(document)
}
【讨论】: