2

いくつかの方法があります(1)eval()(2)新しいコンテキストでコードを評価するノードの機能を使用します(3)https://github.com/gf3/sandbox#readmeのようなものを使用します

しかし、どちらがより安全で優れたパフォーマンスを発揮するかはわかりません。私のユースケースについてはほとんど説明できません。ユーザーがスクリプトを送信すると、そのスクリプトにオブジェクトが渡されます。このスクリプトには、処理ロジックがすでに定義されており、最終的には、アプリケーションで取得してさらに使用するオブジェクトが返されます。

私はインターネットで検索しましたが、どちらに行くべきかについてのいくつかの良い推奨事項を見つけることができませんか?

4

1 に答える 1

1

私のプロジェクトにも同様の要件があり、調査中にあなたの質問に出くわしました。私の調査結果を共有させてください。

eval+ vm.runInNewContext( http://nodejs.org/docs/latest/api/vm.html#vm_sandboxes )を使用:

これは安全ではない可能性があり、メーリング リストや課題トラッカーの声明から、これも推奨される使用方法ではありません。リンクしたサンドボックス モジュールは、この目的に推奨される方法です。

参照: https://github.com/joyent/node/issues/1469

子プロセスの使用 ( http://nodejs.org/api/child_process.html ):

これは、同時実行をあまり計画していない場合に適したソリューションです。新しい子は新しい V8 インスタンスであり、起動に約 30 ミリ秒かかり、約 10 MB のメモリを使用します。完了したら子供を殺し、メモリを解放できます。

サンドボックス モジュール ( https://github.com/gf3/sandbox ):

モジュールはこの目的のために構築され、子プロセスを使用します。それはあなたの問題を最も簡単な方法で解決します。また、独自の子プロセス ベースのソリューションを作成する方法の例として使用することもできます。

于 2013-01-01T11:28:34.030 に答える