Menimbang eval() dan ast.literal_eval() dalam Python Security
Apabila mengendalikan input pengguna, adalah penting untuk mengutamakan keselamatan. eval(), fungsi Python yang berkuasa, sering timbul sebagai penyelesaian yang berpotensi, tetapi kebimbangan menyelubungi potensi risikonya. Artikel ini menyelidiki perbezaan antara eval() dan ast.literal_eval(), menyerlahkan implikasi keselamatannya.
Memahami eval()
eval() menilai input sebaik sahaja ia dimasukkan, tanpa mengira jenis pemeriksaan berikutnya. Ini bermakna bahawa input berniat jahat boleh dilaksanakan sebelum anda mempunyai peluang untuk mengurangkannya. Coretan kod berikut menunjukkan kerentanan ini:
datamap = eval(input('Provide some data here: '))
Memperkenalkan ast.literal_eval()
ast.literal_eval() ialah alternatif yang lebih selamat daripada eval() yang tidak 't laksanakan kod sehingga ia ditentukan untuk selamat. Ia mengesahkan input untuk memastikan ia mewakili literal Python, seperti kamus, senarai atau tupel. Jika input tidak sesuai dengan format ini, ia akan menimbulkan pengecualian, menghalang kod hasad daripada dijalankan.
try: datamap = ast.literal_eval(input('Provide some data here: ')) except ValueError: return # Handle invalid input
Amalan Terbaik
Atas sebab keselamatan, ia sangat disyorkan untuk menggunakan ast.literal_eval() apabila boleh, terutamanya apabila berurusan dengan input yang tidak dipercayai atau tidak pasti. Eval() harus dielakkan kerana potensinya untuk dieksploitasi.
Atas ialah kandungan terperinci Eval() vs. ast.literal_eval(): Fungsi Python Mana Yang Lebih Selamat untuk Input Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!