0

ライブラリ内のどの関数をサーバー側の Javascript プロセスで実行するかをユーザーが構成できるようにする必要があります。ユーザーは、この関数のリストをテキスト ボックス (空白で区切って) に入力できます。プロセスが実行されると、リストが空白で分割され、各関数が検出され、次のステートメントを使用して実行されます。

var curFunction = eval(関数名); curFunction();

内部開発者を除いて、誰も実行する関数のリストを設定することはできませんが、サーバー側のスクリプトがデータベースを変更できるため、とにかくこれを保護したかった.

私の質問は、次の 1 つ以上に一致する functionName パラメータを拒否することで、データベースを保護するのに十分なことを行っているかどうかです。

  1. 正規表現 /[^A-Za-z0-9_]/
  2. Javascript キーワードの正規表現 /^\s*nlapi|^\s*nlobj|^\s*break\s*$|^\s*case\s*$|^\s*catch\s*$|^ \s*続行\s*$|^\s*デバッガー\s*$|^\s*デフォルト\s*$|^\s*削除\s*$|^\s*する\s*$|^ \s*else\s*$|^\s*finally\s*$|^\s*for\s*$|^\s*function\s*$|^\s*if\s*$|^ \s*in\s*$|^\s*instanceof\s*$|^\s*new\s*$|^\s*return\s*$|^\s*switch\s*$|^ \s*this\s*$|^\s*throw\s*$|^\s*try\s*$|^\s*typeof\s*$|^\s*var\s*$|^ \s*void\s*$|^\s*while\s*$|^\s*with\s*$/

入力を関数名に制限し、括弧やキーワードなどを許可しないようにするため、ユーザーは関数変数の割り当て以外は何も機能させてはなりません。

これを回避する方法はありますか?関数は異なるパラメータを取る必要がないので、必要なのは関数名だけです。

4

1 に答える 1