ホームページ >バックエンド開発 >Python チュートリアル >Python セキュリティ: `eval()` の代わりに `ast.literal_eval()` を使用する必要があるのはどのような場合ですか?

Python セキュリティ: `eval()` の代わりに `ast.literal_eval()` を使用する必要があるのはどのような場合ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-27 21:06:12344ブラウズ

Python Security: When Should I Use `ast.literal_eval()` Instead of `eval()`?

Python の eval() と ast.literal_eval()

元の問題:

ユーザーに対する eval() の使用-提供された入力は危険である可能性があります。 ast モジュールの .literal_eval() はどのようにしてより安全な代替手段を提供できますか?

Eval 関数:

eval() 関数は Python ステートメントを評価します。入力には Python コードを含む文字列を指定でき、eval() はそのコードの実行結果を返します。

Eval の危険性:

ただし、eval() は意図しないコードであっても、任意のコードを実行する可能性があるため、危険です。たとえば、ユーザーが次のような入力を行った場合:

eval("import os; os.system('rm -rf *')")

現在のディレクトリ内のすべてのファイルを削除するコマンドが実行されます。

リテラル評価の使用:

eval() とは異なり、ast.literal_eval() 関数は数値リテラルのみを評価します。文字列、ブール値、辞書。これにより、任意のコードが実行されなくなるため、ユーザーが提供したデータをより安全に処理できるようになります。たとえば、提供されたコードでは:

datamap = ast.literal_eval(input('Provide some data here: '))

このコードは、辞書として解析できる場合にのみ入力を評価し、潜在的なセキュリティ リスクを防ぎます。入力が有効な辞書でない場合、ast.literal_eval() は例外を発生させます。したがって、信頼できない入力を処理するには、常に eval() よりも ast.literal_eval() を優先する必要があります。

以上がPython セキュリティ: `eval()` の代わりに `ast.literal_eval()` を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。