ほとんどの現代言語(何らかの方法で解釈される)には、ある種の評価関数があります。このような関数は任意の言語コードを実行します。ほとんどの場合、文字列としてメイン引数として渡されます(異なる言語はeval関数により多くの機能を追加する場合があります)。
特にサーバー側のソフトウェアでは、悪意のあるコードをプロセスに実行させる可能性があるため、ユーザーがこの機能を実行することを許可しないことを理解しています(編集、つまり任意のユーザーからの任意の入力を直接または間接的に取得して渡されますeval
)。そのようにして、チュートリアルとコミュニティはevalを使用しないように指示します。ただし、evalが便利で使用される場合が多くあります。
- ソフトウェア要素へのカスタムアクセスルール(IIRC OpenERPには、
ir.rule
動的なPythonコードを使用できるオブジェクトがあります)。 - カスタム計算および/または基準(OpenERPには、カスタムコード計算を可能にするようなフィールドがあります)。
- OpenERPレポートパーサー(はい、私はあなたをOpenERPのものでおかしくしていることを知っています...しかし、それは私が持っている主な例です)。
- 一部のRPGゲームでのスペルエフェクトのコーディング。
したがって、それらは適切に使用されている限り、有効に使用されます。主な利点は、この機能により、管理者が追加のファイルを作成してそれらを含めることなくカスタムコードを記述できることです(ただし、eval機能を使用するほとんどのフレームワークには、ファイル、モジュール、パッケージなどを指定して読み込む方法があります)。
ただし、大衆文化ではevalは悪です。システムに侵入するようなものが思い浮かびます。
ただし、ユーザーが何らかの方法でアクセスすると有害になる可能性のある他の機能があります:リンク解除、読み取り、書き込み(ファイルのセマンティクス)、メモリ割り当てとポインター演算、データベースモデルアクセス(SQLインジェクタブルのケースを考慮しない場合でも)。
だから、基本的には、ほとんどの時間を任意のコードが書かれていませんが、適切かどうか見て適切に(リソース、ユーザ、環境、...)は、コードが悪であるとさえ経済的影響につながることができます。
しかし、eval
関数には特別なものがあります(言語に関係なく)。
質問:他の危険な要素に同じ注意を払うのではなく、この恐怖が大衆文化の一部になるという歴史的な事実はありますか?
eval
する内部関数が呼び出されることに注意してくださいsafe_eval
。ただし、Pythonは非常に柔軟な言語であるため、制御が難しいため、バグが見つかりました。