私は Node.js を学んでおり (-awesome-)、それを使用して次世代の MUD (オンライン テキスト ベースのゲーム) を作成するというアイデアをいじっています。このようなゲームでは、さまざまなコマンド、スキル、呪文などを使用して悪者を倒し、何百もの部屋や場所を走り回って探索します。一般的に言えば、これらの機能はかなり静的です。通常、新しい呪文を作成したり、新しい部屋を構築したりすることはできません。ただし、スペルや部屋などを定義するコードをユーザーが編集できる MUD を作成したいと考えています。
これには明らかなセキュリティ上の懸念があります。悪意のあるユーザーは、たとえば、子プロセス「rm -r /」をフォークする JS をアップロードする可能性があります。私はゲームの内部を保護することにはあまり関心がありません (可能な限りセキュリティを確保していますが、すべてが公開されている言語でできることは限られています)。私は常にコードの変更を wiki スタイルで追跡し、サーバーをクラッシュさせたり、9000 を超えるパワーを上げたりするユーザーを罰することができます。しかし、サーバーの OS をしっかりと保護したいと考えています。
私は同様の質問に対する他の SO の回答を調べましたが、ほとんどの人はサンドボックス バージョンの Node.js を実行することを提案しています。ファイルシステム、システムコマンド、機密性の高いコアモジュールなどと対話する必要があるMUDのエンジンと対話するためにユーザー定義のJSが必要なため、これは私の状況では機能しません(少なくともうまくいきません)。仮説的には、これらすべてのトランザクションをエンジンで JSON エンコードし、サンドボックス化されたプロセスに送信して処理し、JSON 経由でエンジンに返すことができます。別のプロセスに渡されます。同期であることは言うまでもありませんが、これは避けたいと思います。
したがって、単一の Node モジュールを「サンドボックス化」する方法があるかどうか疑問に思っています。私の考えでは、そのようなサンドボックスは単に「require」機能を無効にする必要があり、すべてが至福になるでしょう。それで、Google/SO で何も見つからなかったので、自分で質問することにしました。