Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menukar Kamus Rentetan kepada Kamus Python Dengan Selamat Tanpa Menggunakan `eval`?

Bagaimanakah Saya Boleh Menukar Kamus Rentetan kepada Kamus Python Dengan Selamat Tanpa Menggunakan `eval`?

Mary-Kate Olsen
Lepaskan: 2024-12-22 05:58:13
asal
205 orang telah melayarinya

How Can I Safely Convert a String Dictionary to a Python Dictionary Without Using `eval`?

Tukar Perwakilan Rentetan Kamus kepada Kamus Tanpa Menggunakan Eval

Tugas yang sedang dijalankan melibatkan menukar perwakilan rentetan kamus kepada kamus Python sebenar. Walaupun eval ialah pilihan yang mudah, terdapat kebimbangan tentang kelemahan keselamatannya. Artikel ini meneroka kaedah alternatif menggunakan fungsi ast.literal_eval terbina dalam.

Fungsi ast.literal_eval

ast.literal_eval ialah fungsi yang direka untuk menilai ungkapan yang mengandungi hanya struktur literal seperti rentetan, nombor, senarai, tupel, dict, boolean dan Tiada. Ia menyediakan pendekatan yang lebih selamat berbanding eval kerana ia mengehadkan input untuk mengelakkan potensi risiko keselamatan.

Penggunaan

Untuk menggunakan ast.literal_eval, import modul ast dan lulus perwakilan rentetan kamus sebagai hujah. Sebagai contoh, pertimbangkan rentetan berikut:

s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
Salin selepas log masuk

Menukar rentetan ini kepada kamus menggunakan ast.literal_eval adalah semudah:

>>> ast.literal_eval(s)
{'muffin': 'lolz', 'foo': 'kitty'}
Salin selepas log masuk

Pertimbangan Keselamatan

Menggunakan ast.literal_eval secara berkesan melindungi daripada serangan suntikan yang mungkin timbul dengan eval. Eval membenarkan input pengguna dilaksanakan secara dinamik sebagai kod Python, meningkatkan risiko suntikan kod berniat jahat. Sebaliknya, ast.literal_eval mengehadkan input kepada hanya struktur literal, menghalang serangan sedemikian.

Contoh

Untuk menggambarkan perbezaan, bandingkan penilaian dua ungkapan berikut :

# Using eval, which can be risky
eval("shutil.rmtree('mongo')")

# Using ast.literal_eval, which is safer
ast.literal_eval("shutil.rmtree('mongo')")
Salin selepas log masuk

Seperti yang ditunjukkan, pendekatan tidak selamat menggunakan eval boleh membawa kepada kritikal ralat sistem, manakala ast.literal_eval dengan betul mengenal pasti rentetan yang cacat dan melontarkan ralat.

Kesimpulan

Ringkasnya, ast.literal_eval menawarkan kaedah yang selamat dan berkesan untuk menukar representasi rentetan kamus ke dalam kamus Python. Tidak seperti eval, ia melindungi daripada suntikan kod berniat jahat sementara masih membenarkan penilaian struktur literal. Ini menjadikannya pilihan yang ideal untuk mengendalikan input pengguna atau data daripada sumber yang tidak dipercayai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Kamus Rentetan kepada Kamus Python Dengan Selamat Tanpa Menggunakan `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