我們正計劃在node.js + express上開發面向業務的應用平臺。我們希望允許用戶運行自己的本地node.js模塊(文件集js,css,html),所以通常它應該像門戶網站和portles/servlet一樣。用戶應該有能力在客戶端部分的服務器端安裝模塊,這些模塊應該與平臺交互,其他模塊會引發一些API。因此需要將這些模塊與直接訪問系統文件和數據庫隔離開來,但它們應該可以訪問它們自己的文件和數據庫。請幫我指出我們應該挖掘的方向以確保安全。 我查看了有關以下內容的信息:vm和子進程中的沙箱。如何在node.js中安全地運行用戶提交的模塊?
我想:
// Main file:
var util = require('util'),
vm = require('vm'),
fs = require('fs'),
sandbox = {
animal: 'cat',
count: 2,
require: require // I pass it to make possible for the module to
// include some additional files
// but it opens access for all system files
};
var context = vm.createContext(sandbox);
fs.readFile('./user_modules/index.js', 'utf8', function (err, data) {
vm.runInNewContext(data, context);
console.log(util.inspect(context));
});
//** User Module
// user_modules/index.js
var fs = require('fs');
count++;
animal = 'Dog';
fs.readFile('README.md', 'utf8', function (err, data) {
animal = 'Fox';
});
我通過REQUIRE對象模塊,以使可能包括一些額外的文件,但它打開了所有的系統文件的訪問,是可以告訴VM或子進程工作只有特定的文件夾?目前我不知道如何使用數據庫,但我認爲當用戶將安裝他的模塊時,平臺應該複製所有文件併爲用戶創建一個數據庫方案,然後當模塊啓動時,我只需要傳遞連接到用戶的對象dbscheme。
請幫助我,我真的是新的節點,任何建議如何解決我的問題?
在此先感謝