Rumah > pembangunan bahagian belakang > Tutorial Python > Keselamatan Python: Bilakah Saya Harus Menggunakan `ast.literal_eval()` Daripada `eval()`?

Keselamatan Python: Bilakah Saya Harus Menggunakan `ast.literal_eval()` Daripada `eval()`?

Mary-Kate Olsen
Lepaskan: 2024-12-27 21:06:12
asal
413 orang telah melayarinya

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

Python's eval() vs. ast.literal_eval()

Masalah Asal:

Menggunakan eval() untuk pengguna -input yang diberikan boleh membahayakan. Bagaimanakah .literal_eval() modul ast boleh menawarkan alternatif yang lebih selamat?

Fungsi Eval:

Fungsi eval() menilai pernyataan Python. Input boleh menjadi rentetan yang mengandungi kod Python dan eval() mengembalikan hasil pelaksanaan kod tersebut.

Bahaya Eval:

Walau bagaimanapun, eval() boleh menjadi berbahaya kerana ia berpotensi untuk melaksanakan kod sewenang-wenangnya, malah kod yang anda tidak berniat. Contohnya, jika pengguna memberikan input seperti:

eval("import os; os.system('rm -rf *')")
Salin selepas log masuk

Ia akan melaksanakan arahan yang memadamkan semua fail dalam direktori semasa.

Menggunakan Literal Eval:

Tidak seperti eval(), fungsi ast.literal_eval() hanya menilai literal angka, rentetan, boolean, dan kamus. Ini menjadikannya lebih selamat untuk mengendalikan data yang disediakan pengguna, kerana ia tidak akan melaksanakan kod sewenang-wenangnya. Contohnya, dalam kod yang disediakan:

datamap = ast.literal_eval(input('Provide some data here: '))
Salin selepas log masuk

Kod hanya akan menilai input jika ia boleh dihuraikan sebagai kamus, menghalang sebarang kemungkinan risiko keselamatan. Jika input bukan kamus yang sah, ast.literal_eval() akan menimbulkan pengecualian. Oleh itu, ast.literal_eval() hendaklah sentiasa diutamakan berbanding eval() untuk memproses input yang tidak dipercayai.

Atas ialah kandungan terperinci Keselamatan Python: Bilakah Saya Harus Menggunakan `ast.literal_eval()` Daripada `eval()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan