質問

仕事をしているphpプロジェクトに走りたいコードの取得からMySQLデータベースです。ありませんので安全でないコードを入なのだと思い悩んでperformace.どちらを使うべきでeval()さんから直接実行コード、解析することcall_user_func()を通じょうか?

例えば、コードを取得した"myfunc(1,2,3);anotherFunc(3,2,1);"
でeval()で直接実行します。

がcall_user_func()って構文解析の文字列でも動く。こちらではの機能を利用かるでしょうか?

役に立ちましたか?

解決

一般的なルールとして、私はいつもできるだけ遠くのeval()から滞在してみてください。 この場合は、しかし、それのための良い候補のように見えます。

あなたは大きな問題があるように、のは、「注入され、安全でないコードの見込みはありません」の言う:データベースにあるコードをunworkingの可能性がある。

そうでない場合は、evalの()は、溶液中であるが、適切な解析とエラーログは/ etcが、その後がある場合は、より安全な賭けかもしれません。 (i)は(call_user_func_arrayを使用して信じて速い理論であるので、任意の解析のオーバーヘッドが無視できるようになるかもしれません)。

他のヒント

保存PHPのデータベースは悪いデザイン嫌な臭いや味の軽減、にもかかわらずこの場合はごくいただけませんを含む、安全でないコードでは、常に良いの回数を最小限に抑えるために想定や防衛のようにしています。する場合にはPHPのコードデータベースに、その攻撃で攻撃者は利益へのアクセスデータベースとなりさらに多くの深刻なった攻撃では、攻撃者が任意のコード!知っていることをデータベースを損うことは考えにくものでは安全保障の実践からないようになる妥協のシステム以上が必要です。

多くの人に同意 そのeval()されず、例外なく、輸入-輸出が全部可能ですのでPHPのコードです。常にある。

この場合、ただ、そうやって考えていくといいと言うことをeval()されるベストソリューションですので、既に保存PHPコードのDB、eval()がないを増やしていくためにはリスク問しました。

いたことをお勧めし

  1. いを検証するためのコードする前にeval()されることにより、保守的に何を与えることができます。いかに攻撃者へのデータベースを考えてもそれは難しい。
  2. あなたには、少なくとも一真剣に考えを書き換えをお願いるPHPのコードではありませんデータベース化されている。の場合の保存の複雑なデータ構造を考えるようなJSONではXMLではなく。安全なパーサが存在し役割を果たすようになります。

すみません場合はこの答えのように見えるビット反動;私が感じるこのようなことは非常に重要です。

私は解析がオーバーヘッドを追加すると思うだろうが、あなたは確認することができます唯一の方法は、テストにそれを実行することです。それを様々な機能を持つ両方の方法を試してみて、あなたの結果が何であるかを参照してください。あなたが店に期待するものを表すコードを使用します。

グッドラック!

はeval()を使用してください。それ以外は努力する価値はない - 彼らは任意の正の副作用はありません。

あなたは影響を与えるいないサンドボックス内でPHPを実行することができますは、runkit の拡張子、見てみることをお勧めします実行中のコード。

コードが実行中のコードを達成するために仮定されている場合は、

、(evalのために行く)。

あなたは(可能性がある、あなたはそこではないだろうと述べていても、それがベストプラクティスである)場合には誤差があり、あなたもtry / catchブロックで実行しようとしているコードをラップする必要があり

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top