ホームページ > バックエンド開発 > Python チュートリアル > 信頼できない文字列を処理する場合、Python の「eval()」関数は安全ですか?

信頼できない文字列を処理する場合、Python の「eval()」関数は安全ですか?

Linda Hamilton
リリース: 2024-12-01 14:40:10
オリジナル
750 人が閲覧しました

Is Python's `eval()` Function Safe When Handling Untrusted Strings?

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:

  • exec() 追加のセキュリティ対策が講じられています。
  • ast.literal_eval() 単純な式を評価します。
  • シリアライザー モジュール

結論

信頼できない文字列を含む Eval() は、重大なセキュリティ リスクを引き起こします。ユーザー提供のコードを処理する場合は、厳密な緩和策を実装するか、代替アプローチを検討してください。 eval() は絶対に必要な場合にのみ使用する必要があることに注意してください。

以上が信頼できない文字列を処理する場合、Python の「eval()」関数は安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート