Python eval() Fonksiyonu

Paylaşmak Güzeldir!

Python konulu yazılarım arasında sıradaki yazı, kötülerin elinde tam bir silaha dönüşebilecek olan Python eval() Fonksiyonu. Peki eval() fonksiyonu bu kadar tehlikeliyse neden var? eval() fonksiyonu ne işe yarar? Nasıl çalışır? Gelin bildiklerimi anlatayım.

Python eval() Fonksiyonu Nedir?

İngilizce bir kelime olan ve dilimizdeki anlamı değerlendirme olan evaluate, bu fonksiyona adını vermiş. Evaluate kelimesinin kısaltmasından gelen eval() fonksiyonu, basit anlatımla kendisine verilen karakter dizisini değerlendirir ve bir sonuç verir. Örnek verecek olursak:

#kullanıcıya matematiksel işlem yapabileceği bir program yazdığımızı varsayalım
#bunun için, girdi değişkenine kullanıcıdan karakter kümesi olarak alacağımız işlemi atayalım

girdi=input("Lütfen sonucunu bulmak istediğiniz matematiksel işlemi yazın. + - * / matematiksel işaretlerini kullanabilirsiniz.")

#girdi değişkenini eval() fonksiyonuyla işleyelim ve işlem sonucunu sonuc değişkenine atayalım
sonuc=eval(girdi)

#Sonucu yazdıralım
print("Verdiğiniz matematiksel işlemin sonucu:", sonuc)

Ufak bir program yazıp, görsel bir örnek de vereyim:

Python eval() Fonksiyonu

Programa girdi olarak 87*48 yazdım ve eval() fonksiyonu bu girdiğim karakter kümesini değerlendirip, bunu bir çarpma işlemi olarak algıladı ve doğrudan sonucu yazdırdı. Göze hoş ve kullanışlı geliyor, değil mi? Aslında öyle, ama tehlikesi de mevcut çünkü eval() fonksiyonu kullanıcından alınan herhangi bir komutu çalıştırmak üzerine kurulmuş. Eğer herhangi bir kısıt koymazsanız, programınıza erişen kişi bilgisayarınızda dosya yaratabilir, dosyaların içeriğini değiştirebilir, dosyaları silebilir ve Python programlama dilinin mukabil olduğu (galiba bu kelimeyi ilk defa cümle içinde kullandım) daha birçok işlemi rahatlıkla yapabilir.

Peki bunu engellemenin bir yolu yok mu? Elbette var, kullanıcıdan aldığınız veriyi eval fonksiyonuna sokmadan önce, bir kontrol adımı tanımlayabilirsiniz. Örneğin, kullanıcıdan aldığınız verinin karakter sayısını kontrol edebilir, sadece sayısal veri almanız gerekiyorsa aldığınız verinin harf içerip içermediğini kontrol edebilir ve kısıtlarınızın oluşması şartıyla eval() fonksiyonunun çalışmasını sağlayabilirsiniz.


Paylaşmak Güzeldir!