0

「34*(12+45.67)>=44-53」のような入力ベースの文字列があり、それが真か偽かを知る必要があります。文字列に数字と */+-().<>= のみが含まれている場合、eval を使用しても安全ですか? それとも、これに対するより良い解決策がありますか?

4

6 に答える 6

1

eval の安全性は、データの取得元とその内容によって異なります。数字と算術演算のみが含まれていることを確認できれば問題ありません。

それだけでは常にエラーが返されるため、解析して PHP ステートメントに変換する必要があることに注意してください。PHP は比較のために == を使用することを思い出してください。変数が 1 つまたは 2 つ必要になります。

于 2013-06-07T16:58:47.067 に答える
1

evalユーザー入力を評価している場合、それ自体は決して安全ではありません。その道をたどれば、すべてのセキュリティはあなた次第です。あなたのコードがどこでも機密事項をいじる能力を持っているなら、悪意のあるユーザーがあなたのアプリケーションを台無しにする可能性のある何千もの方法をすべて解決し、防ぐことができれば幸いです。

それ以外の場合は、サーバーにアクセスして命を救うことができないサンドボックス ページがどこかにあるだけであれば、安全です。

于 2013-06-07T16:59:01.483 に答える
1

安全のために、不要な文字を取り除くことができます。

$x = preg_replace('/[^0-9+\-\*\/()>=]/', '', $input);
eval($x);

これにより、含まれていないものはすべて削除されます0,1,2,3,4,5,6,7,8,9,0,/,+,-,*,(, or )

于 2013-06-07T17:04:51.610 に答える