ページにフォーム フィールドがあり、ユーザーが単純な数式を入力した場合、値を解に置き換えたいと考えています。したがって、ユーザー1 + 2
がフィールドに入力してヒットした場合enter、入力値を に置き換えます3
。
現在、この正規表現に一致する場合にのみ方程式を評価します。
/^[\d. \+/\*-]+$/
つまり、文字列全体が数字、スペース、プラス、マイナス、乗算、または除算文字で構成されている場合です。
次に、次のように値を評価します。
(new Function('try {var a = ' + val + '; return a;} catch(e) {return -1;}'))()
このフォーム フィールドは、クエリ文字列パラメーターによって事前に入力することができ、クライアントはそれを実行しようとします。別名潜在的な攻撃は mysite.com?inputVal=cookieStealingProgramです。ユーザーが悪用コードにリンクできるようにしたくありません。
(1 + 2) / 3 ^ 5
たとえば、ユーザーが挿入できるように、括弧と指数を正規表現に追加したいと思います。数字と演算子だけではエクスプロイトが不可能であることはかなり確信していますが、括弧を使用したケースについては確信が持てません。
文字の組み合わせのみを使用すると、完全に実行可能な JavaScript プログラム! [ ] + ( )
を作成できることを認識しています。また、Google で「javascript エクスプロイト文字」とさまざまな組み合わせを検索してみましたが、簡単に見つけることはできません。
私の具体的な質問は0-9 . + - / * ( ) ^
、 (スペース文字が許可されている)のみを使用して任意の JavaScript プログラムを作成できるかどうかです。少しオープンエンドなので、数日経っても例を提供できない場合は、この質問を閉じても問題ありません。
これを行うためのパーサーを実装したり作成したりしていません。それは質問とは無関係です