3

これが私の状況です。私は、十分な権限を持っているが信頼されていないユーザーが数式を編集できるようにする必要がある、重い数学的計算を含むアプリケーションを構築しています。

安全なサーバー側スクリプト言語が必要です。4 つ以上のデータベース テーブルからの定数と値、以前の計算の結果にアクセスし、ユーザー変数と関数を定義し、if/then/else ステートメントを使用できるようにする必要があります。今。

私が検討したいくつかのオプション:

  1. この数学ライブラリのようなものを使用することを検討しましたが、私のユースケースではかなり拡張する必要があります。私は基本的に、独自のカスタム言語を作成していました。

  2. PHP runkit サンドボックス. これまで使用したことはありませんが、関連するセキュリティの問題が非常に心配です。考えられるセキュリティ上の問題を考慮すると、これは実行可能なオプションではないと思います。

  3. 可能かどうかわからないという私の頭をよぎったもう1つのアイデアは、サーバー側でjavascriptのようなものを使用することです。機能を拡張するために、デスクトップ アプリケーションのスクリプト プラットフォームとして js が使用されているのを見てきましたが、同様のアプローチが実現可能であると思われます。ファイルシステムへのアクセスを無効にするなど、実行する環境を理想的に定義することができました。ここでも、セキュリティが問題になるようです。

私が行った調査によると、おそらく 1 番が唯一の選択肢のようですが、より大きな人材プールで確認することにしました。:-)

#3が可能であれば、それが進むべき道のようですが、役立つものは何も見つからないようです. 一方、#2 と #3 の間には大きな違いはないかもしれません。

パフォーマンスは別の考慮事項です。それぞれが約 450 回実行される、およそ 65 のいくつかの奇妙な式があります。各数式は、約 15 個の一意の変数と 100 程度の定数、および前の数式の結果にアクセスできます。(はい、特定の実行順序があります。)

ユーザーイベントによって計算が開始され、データベースに保存される非同期の計算アプローチを使用できますが、そうする必要はありません。

この状況に対処する最善の方法は何ですか? 私の調査でまだ見つかっていないサードパーティのライブラリはありますか? 3 以外に考慮すべきオプションはありますか?

4

2 に答える 2

0

2つの基本的な選択肢があります。

a)何が行われるかを完全に制御できる独自の言語を提供して、悪いことが起こらないようにします。

b)他の実行エンジンを使用し、それが行うすべてのことをチェックして、悪いことが何も起こらないことを確認します。

b)に関する私の問題は、誰かがあいまいな方法で行う可能性のあるすべての悪いことを理解するのがかなり難しいことです。

私はa)を好みます。なぜなら、あなたは彼らにあなたが許可したことをする能力を与えるだけでよいからです。

処理したい数式のセットがかなり単純な場合、実際にはパーサー/エバリュエーターを作成するのは非常に簡単です。8ビット組み込みシステムで使用できるフレックス/バイソンの代替手段はありますか?を参照してください。

パフォーマンスに問題があるかどうかはわかりません。はい、450回何かを実行したいと思います。ただし、データベースアクセスが含まれ、そのコストが1000の算術ステップを含む計算を支配します。DBアクセスを高速化するために、DBアクセスをキャッシュする必要があるため、速度が制限される場合があります。

于 2012-05-29T00:06:59.430 に答える