5

少し調べてみましたが、私のケースを成功させるものは何も見つかりませんでした。

だから、私は.js外部スクリプトからロードしrequire(..)ています.各スクリプトは関数をエクスポートします..

main.js

var main=10;
var mod1 = require("./mod1.js");

mod1.js

module.exports=function(){
 console.log('loaded');
 var net=require('net'); // i don't want it to be able to require certain node.js apis
 net.create...; 
}

.jsonファイルが を宣言し、permissionsそうであればスクリプトへのアクセスを許可する方法をいくつか見ました。コア node.js api でそのようなことをどのように達成できますか?

4

1 に答える 1

9

正確に何が必要かによって、vmモジュール (Node に組み込まれている) を一種のサンドボックスとして使用できる場合があります。

var vm = require('vm');
var fs = require('fs');

var safe_require = function(mod) {
  var code    = fs.readFileSync(require.resolve(mod));
  var sandbox = {
    console : console,
    module  : {},
    require : function(mod) {
      // as a simple example, we'll block any requiring of the 'net' module, but
      // you could implement some sort of whitelisting/blacklisting for modules 
      // that are/aren't allowed to be loaded from your module:
      if (mod === 'net') {
        throw Error('not allowed');
      }
      // if the module is okay to load, load it:
      return require.apply(this, arguments);
    }
  };
  vm.runInNewContext(code, sandbox, __filename);
  return sandbox.module.exports;
};

var mod = safe_require('./mod1');

(ご覧のconsoleとおり、モジュールで使用するNode の組み込み関数はsafe_require、サンドボックス オブジェクトに渡す必要があります)

于 2013-10-18T07:36:52.570 に答える