ユーザーが任意の JavaScript コードを送信できるようにしたいと考えています。このコードは Node.JS サーバーに送信され、出力が複数のクライアントに (JSON として) 返される前に安全に実行されます。eval
関数が思い浮かびますが、これには複数のセキュリティ上の懸念があることを知っています (ユーザーが送信したコードは、ノードのファイル API にアクセスできるなど) 。Microsoft Web Sandbox や Google Caja など、サニタイズされたマークアップとスクリプト (サードパーティの広告を Web サイトに埋め込むため) の実行を許可するプロジェクトを見てきましたが、これらはクライアント側のツールであるようで、できるかどうかはわかりません。ノード内で安全に使用できます。
Node で信頼されていない JavaScript をサンドボックス化して実行し、出力を取得する標準的な方法はありますか? これをサーバー側でやろうとするのは間違いですか?
編集:ユーザーが JavaScript のすべての機能を活用できることは重要ではありません。実際、ユーザー コードに提供される API を選択できることが望ましいでしょう。
編集:先に進み、見つけたもので更新します。この Sandcastle モジュール ( bcoe/sandcastle
) は、私が考えていることを実行することを目的としているようです。どれだけ安全かはわかりませんが、私はこれはあまり重要なことではないので、試してみようと思います. これをうまく行うことができれば、私自身の答えを追加します。