Python - Eval Fonksiyonu

ArViX

Uzman üye
28 Şub 2013
1,273
0
cos a=cos bc
Bugün ki konumuzda eval fonksiyonunu işleyeceğiz. Genellikle python programlamaya başlayan yeni arkadaşlarımız bu fonksiyonu kullanarak hesaplama işlemleri yapmaktadır oysa ki eval komutu filtrelemeden geçirmeden kullanmak büyük bir hatadır aşağıda örnek olarak yazdığım eval kullanılmamış bir hesap makinesini inceleyelim ve evalda ki gibi sınırsız veri girişi yapalım(tabi ki toplama fonksiyonunu çağırdıktan sonra bu kodda aynı anda toplama dışında ki diğer işlemleri yapamıyoruz ufak tefek eklemelerle gayet rahat yapılabilir)
Kod:
class arvix_hesapmakinesi():
    def toplama(self,*args):
        toplam =0
        for i in args:
            toplam+=i
        return toplam
    def carpma(self,*args):
        carpim=1
        for i in args:
            carpim *=i
        return carpim
    def bolme(self,a,b):
        return a/b
    def cikarma(self,*args):
        toplam =0
        for i in args:
            toplam+=i
        return toplam-2*toplam

a = arvix_hesapmakinesi().cikarma(4,5,6)
print(a)
yukarıda basitçe classtan ürettiğimiz fonksiyona istediğimiz kadar veri girişi yapıp toplama çıkarma ve çarpma yapabiliyoruz. (bölmeyi bilerek eklemedim saçma olmasından dolayı).Eval kullanmadan hemen hemen bu kadar kod satırı ile işlemlerimizi gerçekleştirebiliyoruz peki neden
vaynEz.png

bu kadar kısa kod satırı ile işimizi halletmiyoruz ?
İngilizce de evaluate kelimesinden dönüşmüştür işleme sokmak çalıştırmak anlamına gelir yani kısaca bu fonksiyonun görevi karnına gelen değerleri çalıştırmak ve işlemektir yukarıda gördüğümüzde gayet masumhane şekilde çalışmaktadır.Peki biz bu eval fonksiyonu ile yazdığımızı düşündüğümüz hesap makinesine
Kod:
__import__("os").getlogin()
komutunu gönderirsek ne olur ? Şuanda oturumunu açtığımız kullanıcı adımızı bize söylemektedir.Biz bu programı hesap makinesi yapmak için yazmıştık oysa ki artık program amacından saptı ve farklı şekilde çalıştırabiliyor.Bir web sunucumuz üzerinde arka plan işlemi yaptırdığımızı düşünelim bu fonksiyonu biz ne kadar iyi niyetle yazsak da bu şekilde istismar edilebilir sunucuda dosya açılabilir silinebilir/okunabilir/yazılabilir o saatten sonra her şey saldıran kişinin hayal gücüne kalmıştır.

Ee ben peki bu güzelim fonksiyonu kullanamayacak mıyım?Tabi ki kullanacaksanız ancak gerekli filtreleme işlemleri yaptıktan sonra. Örneğin sayıların bulunduğu bir karakter dizisi tanımlayıp tek tek eşleştirip bunlarla uyuşmayan bi karakter dizisi geldiğinde programı direkt olarak sonlandırabilirsiniz

 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.