1

重複の可能性:
ユーザーが送信したスクリプトを node.js サンドボックスで安全に実行する方法は?

ユーザーが特定のオブジェクトで動作する独自のフォーマット関数を作成できるようにしたいと考えています。私はそれを行う2つの方法を見つけましたが、その機能がハッキングできるかどうかはわかりません. nodeJS 内で実行されます。

//First way with eval (evil ?)
function convertObj(formula) {
   return function (obj) {
        return eval(formula);
    };
}

// Second way with function (same as eval ?)
function convertObj2(formula) {
  return new Function("obj", "return " + formula);
}

var inst = {
      "name": "BOB",
      "age": "30"    
    };

var formula = "obj.name.toLowerCase() + ' is ' + obj.age + ' years old'";

var next = convertObj(formula);
var next2 = convertObj2(formula);

document.write('<p>' + next(inst) + '</p>');
document.write('<p>' + next2(inst) + '</p>');​

印刷する

bob is 30 years old
bob is 30 years old

この例は、http://jsfiddle.net/DeWYy/2/でも入手できます。

4

1 に答える 1

1

どちらも脆弱です。文字通り、何も制御せずに誰かに何かを実行させているからです。

おそらくやりたいことは、サンドボックス内でコードを実行することです。それを支援するライブラリがあります (簡単な Google 検索でSandboxが表示されます)。ユーザーが送信したコードをサンドボックスで実行する場合でも、リスクは常に存在することに注意してください。ただし、ほとんどの場合、リスクは軽減されます。したがって、重要なサービスを実行していない限り、安全であると見なすことができます.

また、ユーザーが送信したコードの安全な実行に関するこの質問を確認することをお勧めします。

于 2012-10-05T15:30:10.743 に答える