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
341 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!

sumber:php.cn
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