node.js + Express でビジネス指向のアプリケーション プラットフォームを開発する予定です。また、ユーザーが独自のネイティブな node.js モジュール (ファイル js、css、html のセット) を実行できるようにしたいので、通常はポータルとポート/サーブレットのようにする必要があります。ユーザーはクライアント部分を使用してサーバー側にモジュールをインストールでき、これらのモジュールはプラットフォームと対話し、他のモジュールはいくつかの API をスローする必要があります。そのため、これらのモジュールをシステム ファイルとデータベースへの直接アクセスから分離する必要がありましたが、独自のファイルとデータベースにアクセスできる必要があります。それを安全にするためにどの方向を掘るべきか教えてください。次の情報を確認しました: vm および子プロセスのサンドボックス。
私は試した:
// 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 または子プロセスに特定のフォルダーのみを操作するように指示することは可能ですか? 現在、データベースの操作方法はわかりませんが、ユーザーがモジュールをインストールするときに、プラットフォームはすべてのファイルをコピーし、ユーザーの db スキームを作成する必要があると思います。その後、モジュールが起動するときに、ユーザーに接続されたオブジェクトのみを渡す必要がありますデータベーススキーム。
私を助けてください、私はノードに本当に慣れていません。私の問題を解決する方法はありますか?
前もって感謝します