サーバー側のサンドボックススクリプトの選択は何ですか?[閉まっている]


11

ユーザーがデータとスクリプトを共有して一部のデータを実行する公開Webサイトを構築しています。このサイクルは、このサイクルで他の対話なしに何らかのサンドボックスでサーバーサイドで実行されます。Perlプログラムはデータベースからユーザー作成スクリプトを読み取り、処理するデータをスクリプト(JSONドキュメント)に追加し、インタープリターを呼び出します。応答(JSONドキュメントまたはプレーンテキスト)を返し、perlスクリプトを使用してデータベースに保存します。スクリプトは、自分でスクリプト言語に追加された組み込み関数にアクセスできる必要がありますが、それ以上ではありません。

だから私は、JavaScriptインタープリターとしてnode.jsに出くわし、そして1時間ほど前にGoogleのV8を使いました(v8はこの種のことには意味がありますか?)。CoffeeScriptも見栄えがよく、Javascriptのままなので、思い浮かびました。

javascriptはOS呼び出しやリモートで安全でないものがないため、十分に普及しており、「サンドボックス化可能」だと思います(私は思う)。

ところで、私はPerlとPHPでフロントエンドのシステムを書いています。

質問を改善するために:node.jsで実装するのに十分安全でシンプルだと思うのでJavascriptを選択していますが、この種のタスクを達成するための他の選択肢はありますか?ルア?Python?サンドボックスインタープリターを適切な方法で実行する方法に関する情報が見つかりません。


あなたが何を求めているのか明確ではありません。出来ますか?もちろん、それは可能です。
ロバートハーベイ

回答:


3

JavaにはJavaScriptインタープリターが組み込まれています。デフォルトではサンドボックス化されていませんが、次の方法で有効にできます。

  • 正しいクラスシャッターの設定-JavaScriptは通常Javaクラスをロードできます。クラスシャッターは、ロードできるクラスとロードできないクラスを決定する一種のセキュリティマネージャーです。
  • 「スタートアップ」スクリプト-外部システムへのアクセスポイントを削除する短いJavaScript初期化: java = undefined;Packages = undefined;org = undefined;

これを行うと、内部で実行されているスクリプトは外部環境にアクセスできなくなります。

また、スクリプトタイムアウトと命令カウント制限機能も提供します。これは、サンドボックス化に便利です。スクリプトの長さや複雑さを制限できます。

Rhino JavaScriptエンジンを搭載したJava 7でこれを使用しました。Java 8には、より新しい、より近代的なエンジンNashornがあります-Nashornで試したことはありませんが、似ているはずです。


ブラックリストではなくホワイトリストに登録できますか?
ペタ

@Petahでは、最初にすべてを無効化(ブラックリスト)してから、オブジェクトの形で特定の機能をサンドボックスにプッシュできます。これは本質的にホワイトリスト登録ですので、はい、できます。
qbd

JavaScriptの知識は広く普及しており、スクリプト言語として適切な選択になっています。呼び出しへのアクセスを制限しているため、ユーザーの呼び出しだけでなく、いくつかのグローバルを定義することもできます。ブラウザーwindowがJavaScriptの変数を定義して相互作用を可能にする方法を考えてください。
マイケルショップシン

2

私が最初に考えたのはnode.jsでした-前述のように、これはjavascriptインタープリターです。本当に安全な方法でスクリプトをサンドボックス化する場合は、まさにそれが必要です。

別の方法として、スクリプト内のすべてのコマンドが有効かどうかをチェックすることもできます。しかし、私はあなたが安全なサンドボックスを手に入れるとは思わない。

あいさつ


NodeJSまたはNodeJSで利用できるサンドボックスサポートはありますか?
ysdx

4
これを見つけました:gf3.github.com/sandbox
ysdx

「NIFTY JAVASCRIPT SANDBOX FOR NODE.JS」への素晴らしいリンクについては+1。
ジャックストーン

注:gf3サンドボックスは分割できます。
ペタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.