Menilai data yang disediakan pengguna ialah tugas biasa dalam Python. Walau bagaimanapun, adalah penting untuk berbuat demikian dengan selamat untuk mengelakkan potensi kelemahan keselamatan. Artikel ini membandingkan eval() dan ast.literal_eval() untuk tujuan ini, menangani kebimbangan tentang bahaya yang dilihat oleh bekas.
Eval() melaksanakan secara langsung yang disediakan data sebagai kod Python. Walaupun nampaknya mudah, ini boleh menjadi sangat berbahaya jika input berniat jahat. Ia boleh membawa kepada pelaksanaan kod sewenang-wenangnya, mendedahkan aplikasi anda kepada pelanggaran keselamatan.
Ast.literal_eval() ialah fungsi khusus untuk menilai data Python literal jenis, seperti kamus dan senarai. Tidak seperti eval(), ia mengesahkan input dengan ketat dan menimbulkan pengecualian jika ia bukan jenis data yang sah. Ini menghalang pelaksanaan kod arbitrari, menjadikannya pilihan yang lebih selamat.
Perbezaan utama antara eval() dan ast.literal_eval() terletak pada masa penilaian. Eval() segera melaksanakan input, manakala ast.literal_eval() melakukan pengesahan terlebih dahulu. Oleh itu, percubaan untuk menyemak jenis peta data selepas menggunakan eval() akan menjadi tidak berkesan kerana data telah pun dinilai.
Adalah sangat disyorkan untuk menggunakan ast.literal_eval() berbanding eval () untuk menilai data yang disediakan pengguna. Pengesahan ketatnya menghalang potensi kelemahan keselamatan dan menyediakan pendekatan yang lebih mantap untuk mengendalikan input.
Atas ialah kandungan terperinci Keselamatan Python: `eval()` lwn. `ast.literal_eval()` – Mana Yang Perlu Anda Gunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!