Perils of Eval: Mengapa Extensibility Tidak Berbaloi dengan Risiko
Extensibility ialah ciri yang diingini dalam pengaturcaraan, membenarkan kelas untuk menampung dengan mudah atribut tambahan. Walau bagaimanapun, menggunakan fungsi eval untuk mencapai ini boleh menjejaskan keselamatan dan memperkenalkan akibat yang tidak dijangka.
Risiko Eval
Eval, yang menilai rentetan sebagai kod Python, menimbulkan beberapa bahaya yang wujud:
Lebih Selamat Alternatif
Dalam konteks kelas Lagu yang disediakan, setattr menawarkan penyelesaian yang selamat dan boleh diperluas tanpa risiko yang berkaitan dengan eval:
class Song: attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: setattr(self, att.lower(), None) def setDetail(self, key, val): if key in self.attsToStore: setattr(self, key.lower(), val)
Pendekatan ini menghapuskan potensi bahaya eval sambil mengekalkan fleksibiliti yang diingini dalam menguruskan lagu atribut.
Kesimpulan
Walaupun eval mungkin meluaskan fungsi kod secara dangkal, penggunaannya harus dielakkan kerana risiko keselamatan yang ketara yang diperkenalkannya. Setattr menyediakan penyelesaian yang lebih selamat dan sama berkesan yang mengekalkan kebolehbacaan kod, kebolehnyahpenyahpetasan dan prestasi.
Atas ialah kandungan terperinci Adakah Kebolehlanjutan dengan `eval()` Berbaloi dengan Risiko Keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!