Мы планируем разработать платформу бизнес-ориентированного приложения на узле.js + express. И нам нравится разрешать пользователям запускать собственные собственные модули node.js (набор файлов js, css, html), поэтому обычно это должно быть похоже на портал и порты/сервлеты. Пользователи должны иметь возможность устанавливать модули на стороне сервера со своей клиентской частью, и эти модули должны взаимодействовать с платформой и другими модулями, чтобы добавить некоторые 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';
});
Я прошел ТРЕБУЮТ объект в модуль, чтобы сделать возможным включить некоторые дополнительные файлы, но он открывает доступ для всех системных файлов, можно сказать VM или дочерний процесс работы только с конкретными папками? В настоящее время я понятия не имею, как работать с базой данных, но я думаю, что когда пользователь установит свой модуль, платформа должна скопировать все файлы и создать схему db для пользователя, а затем, когда модуль запустится, мне нужно передать только объект, который подключен к пользователю dbscheme.
Пожалуйста, помогите мне, я действительно новичок в узлах, любые предложения по решению моей проблемы?
Заранее спасибо