Python セキュリティにおける eval() と ast.literal_eval() の比較
ユーザー入力を処理するときは、セキュリティを優先することが不可欠です。強力な Python 関数である eval() が潜在的な解決策としてしばしば浮上しますが、その潜在的なリスクには懸念があります。この記事では、eval() と ast.literal_eval() の違いを詳しく掘り下げ、セキュリティへの影響を強調します。
eval() について
eval() は入力を評価します。後続の型チェックに関係なく、入力されるとすぐに。これは、悪意のある入力が軽減される前に実行される可能性があることを意味します。次のコード スニペットは、この脆弱性を示しています。
datamap = eval(input('Provide some data here: '))
ast.literal_eval() の紹介
ast.literal_eval() は、eval() のより安全な代替手段です。安全であると判断されるまでコードを実行しないでください。入力を検証して、辞書、リスト、タプルなどの Python リテラルを表していることを確認します。入力がこの形式に適合しない場合は例外が発生し、悪意のあるコードの実行が防止されます。
try: datamap = ast.literal_eval(input('Provide some data here: ')) except ValueError: return # Handle invalid input
ベスト プラクティス
セキュリティ上の理由から、これは非常に危険です。特に信頼できない入力や不確かな入力を扱う場合には、可能な限り ast.literal_eval() を使用することをお勧めします。 Eval() は悪用される可能性があるため避けるべきです。
以上がEval() と ast.literal_eval(): ユーザー入力に対してどちらの Python 関数が安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。