2016-12-11 8 views
0

vm2を使用してノードにサンドボックスコードを実行しています。ノードVM2で現在実行されているコードを終了するには

実行されるコードはほとんど非同期です。それは信頼できないコードなので、何らかの形で準拠するために依存することはできないため、なぜ私はvm2を使ってそれを実行していますか?

vm2には現在実行中のコードを終了する方法がありますか?ドキュメントは非常に限られています。私はこのコードを持っているとしたら、例えば:

var code = 'setInterval(function(){ console.log("tick"); }, 1000);' 
vm.run(code); 

を、私は、上記を実行し、制御コードの内容について何も知らなくても、将来のある時点でそれを停止する可能性のある方法はありますcodeのいずれかの特定の機能を提供する必要はありませんか?

vm.stop()の方法などが見つかりません。

答えて

3

残念ながら、VMで実行中のコードの実行を中断する方法はありません。 vm2ライブラリは、ノードのVMモジュールをベースにしています。このモジュールは、サンドボックス内で実行中のコードを中断するメソッドを提供しません。少なくともこれを書いた瞬間ではありません。

制限できるのは、同期実行の期間だけです。

免責事項:私は著者vm2ライブラリです。

+0

非同期コールバックのタイムアウトを設定できますか?それとも、永遠に実行されますか? –

+0

カスタムオブジェクトで信頼できないJSコードを実行し、setTimeout()を再帰的に実行できないようにするにはどうすればよいでしょうか? –

+0

おそらく、私は、VMコードにsetTimeout( "alwaysrandomsecretvaluehere()")を追加できます。ここで、context.alwaysrandomsecretvalue = process.exit? –

関連する問題