node.js (または他の SSJS ソリューション) を使用して、独自のコード + 内部で記述された外部コード (信頼されていない) を実行したいと考えています。
自分のコードを分離して保護する方法はありますか? 信頼されていないコードのモジュールとシステムへの影響を制限できますか (ファイルへのアクセス、非 HTTP ポートなどを制限します)?
node.js (または他の SSJS ソリューション) を使用して、独自のコード + 内部で記述された外部コード (信頼されていない) を実行したいと考えています。
自分のコードを分離して保護する方法はありますか? 信頼されていないコードのモジュールとシステムへの影響を制限できますか (ファイルへのアクセス、非 HTTP ポートなどを制限します)?
あなたはこのプロジェクトをチェックアウトすることができます、それは非常に有望に思えます:
http://github.com/gf3/node-sandbox
個人的には、Node を使用して任意の SSJS を実行することはありません。あなたはおそらくこの解決策を好まないでしょうが、私にとっては約1年間うまくいきました:
Spidermonkey の API (Spidermonkey は Firefox の JS エンジン) の Perl 実装が利用可能です。私はいくつかの CGI の助けを借りてそれを接続しました。公開したい関数を正確に指定し (確かに、Perl... blech にあります)、好きなコードを実行できます。セットアップ全体が完全にサンドボックス化されているため、脆弱性のリスクはありません。DOM をシミュレートしません。
これをサーバーに実装した方法 (悪用を防ぐため) は、別のサーバーで REST API を介して 1 回限りのアクセスを許可するトークンを発行することでした。これは、トークンの正当性を強化するためのタイムスタンプを含む単純な HMAC 実装です。Perl スクリプトがリクエストを受け取ると、トークンを検証してスクリプトを処理します (スクリプトは POST リクエストの一部である必要があります)。その後、Perl スクリプトは結果を書き込むだけです。私のサーバーは、約 10 秒でタイムアウトになるように設定されています。
お役に立てれば!
node.jsのドキュメントからこれをチェックしてください
script.runInNewContext([サンドボックス])
Script.runInNewContext (大文字の 'S' に注意) に似ていますが、プリコンパイルされた Script オブジェクトのメソッドになりました。script.runInNewContext は、sandbox をグローバル オブジェクトとしてスクリプトのコードを実行し、結果を返します。実行中のコードは、ローカル スコープにアクセスできません。サンドボックスはオプションです。
Cajaをご覧ください。サードパーティのコードを、明示的に付与したオブジェクトにのみコードがアクセスできる形式に変換します。