Python の Eval(): 信頼できない文字列によるセキュリティ リスク
はじめに
Python eval() 関数を使用すると、文字列からコードを動的に実行できます。多用途ではありますが、信頼できない文字列を評価する場合には重大なセキュリティ リスクが生じます。この記事では、これらのリスクを検証し、考えられる軽減策を示します。
信頼できない文字列によるセキュリティ リスク
1. Foo オブジェクトからのクラス メソッドへのアクセス (eval(string, {"f": Foo()}, {}))
はい、これは安全ではありません。 eval(string) を介してそのインスタンスから Foo クラスにアクセスすると、Foo インスタンス内から os や sys などの機密モジュールにアクセスできる可能性が与えられます。
2. Eval (eval(string, {}, {}))
を介した組み込みへのアクセス はい、これも安全ではありません。 Eval は、len や list などの組み込み関数にアクセスできます。これらは、os や sys などの安全でないモジュールにアクセスするために悪用される可能性があります。
3. Eval コンテキストからのビルトインの削除
Python の eval コンテキストからビルトインを完全に削除する実行可能な方法はありません。
軽減策
1.慎重な文字列検証
悪意のあるコードの実行を防ぐために、ユーザーが指定した文字列を徹底的に検証します。
2.制限されたローカル変数
評価された文字列内で使用可能な変数を制限するには、eval() の locals パラメーターを使用します。
3.カスタム安全評価関数
機密モジュールおよびオブジェクトへのアクセスを制限するカスタムのサンドボックス評価関数を実装します。
eval() の代替
eval() の代替手段を検討してください。 as:
結論
信頼できない文字列を含む Eval() は、重大なセキュリティ リスクを引き起こします。ユーザー提供のコードを処理する場合は、厳密な緩和策を実装するか、代替アプローチを検討してください。 eval() は絶対に必要な場合にのみ使用する必要があることに注意してください。以上が信頼できない文字列を処理する場合、Python の「eval()」関数は安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。