ユーザー提供データの評価は、Python の一般的なタスクです。ただし、潜在的なセキュリティ脆弱性を回避するために、安全に行うことが重要です。この記事では、この目的で eval() と ast.literal_eval() を比較し、前者の認識されている危険性についての懸念に対処します。
Eval() は、提供されたメソッドを直接実行します。データを Python コードとして保存します。一見便利なように見えますが、入力が悪意のあるものである場合、これは非常に危険です。任意のコードが実行され、アプリケーションがセキュリティ侵害にさらされる可能性があります。
Ast.literal_eval() は、リテラル Python データを評価するための専用関数です。辞書やリストなどのタイプ。 eval() とは異なり、入力を厳密に検証し、有効なデータ型でない場合は例外を発生させます。これにより、任意のコードの実行が防止され、より安全な選択になります。
eval() と ast.literal_eval() の主な違いは、評価のタイミングにあります。 Eval() は入力をただちに実行しますが、ast.literal_eval() は最初に検証を実行します。したがって、eval() を使用した後にデータマップのタイプをチェックしようとしても、データはすでに評価されているため効果がありません。
eval ではなく ast.literal_eval() を使用することを強くお勧めします。 () ユーザーが提供したデータを評価します。その厳格な検証により、潜在的なセキュリティ脆弱性が防止され、入力を処理するためのより堅牢なアプローチが提供されます。
以上がPython セキュリティ: `eval()` と `ast.literal_eval()` – どちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。