PHP eval Fonksiyonu ve Kod Şifreleme

Merhabalar, bu yazıda php’nin çok faydalı ve bir o kadar da tehlikeli fonksiyonu eval’dan bahsedeceğiz. Peki bu eval fonksiyonu ne işe yarıyor? Eval fonksiyonu içine string olarak yazdığınız php kodunun çalıştırılmasını sağlıyor. Bu sayede dışarıdan aldığımız bir değeri php kodu şeklinde çalıştırabiliyoruz. Tehlikeli olmasının nedeni ise bu fonksiyona herkese açık bir yerden değer alırsanız her türlü kod parçası çalıştırılabileceği için yüksek seviye güvenlik açığı oluşmuş olacaktır.

Yukarıdaki kod bloğunu çalıştırırsanız eval fonksiyonu text değişkeni içindeki kodu çalıştıracaktır ve ekrana “merhaba” çıktısını almış olacağız. Tek satırlık bir kod değil birden fazla kodu da çalıştırabilirsiniz. Ona da bir örnek yapalım hemen, bir değişken tanımlayalım ve onu ekrana bastıralım.

Gördüğünüz gibi isim değişkenini oluşturduk ve onu ekrana bastırdık. Ekranda “orcun” yazmış olacaktır.

Hadi işleri biraz daha karıştıralım. Şöyle bir senaryomuz olsun. Bir kod yazdınız ve bunu birileri ile paylaşacaksınız. Fakat yazdığınız kod herkes tarafından apaçık görünsün istemiyorsunuz. O zaman yazdığınız kodu base64 ile şifreleyelim ve eval içinde base64 şifresini çözüp çalıştırtalım.

Bu base64 tabiki çok basit bir şifreleme ve aynı şifrelendiği gibi basitçe geri çözülebiliyor. Daha güvenli şifreleme sistemleri mevcut. Örnek olarak ionCube şifreleme sistemi benzer şekilde php kodlarını bir algoritmaya göre şifreliyor ve sunucuya kurulan eklenti ile çözerek eval ile çalıştırıyor.

Kodumuzu şifrelemek için base64_encode, şifreyi çözmek için de base64_decode fonksiyonlarını kullanacağız. Şifreleme yaparken kodu öncelikle base64_encode($text) şeklinde geçirin bu şifreyi ekrana bastırın. Bu şifreyi kaydedin, birazdan kullanacağız. Ekstra olarak bu şifreleme işini illa php içinde elde etmek zorunda değilsiniz. İnternette bulunan base64 encoder araçları ile de basitçe yapabilirsiniz.

Hemen şifreleme işlemini yapalım. Örnek olarak şu aracı kullanarak kodumuzu şifreleyelim. Ayrıca sadece çalışacak kodumuzu şifreliyoruz. Text olarak ayarlığımız değişkeni de şifrelemeyin.

Normal metin:

Şifrelenmiş metin:

Şimdi php içinde kodu kullanırkan bu şifreyi çözüp kodumuzu çalıştıralım.

Daha kısa ve iç içe gözüksün istiyorsanız şöyle de yazabiliriz.

Bu kodun içinde lisans kontrol vs yapabilirsiniz fakat dediğim gibi çok basit kalacaktır. Burada sadece işin mantığını göstermiş olduk. Kendi şifreleme algoritmalarınızı yazarak da kullanabilirsiniz. Hatta şöyle bir şey de yapabilirsiniz. En son oluşturduğunuz (içinde base64_decode olan eval fonksiyonu) kodu bir daha base64 şeklinde şifreleyip tekrar eval içine yazarsanız 2 kere arka arkaya şifreleme yapmış olursunuz.

Bu şifreleme algoritması için aklınıza md5 veya sha1 tarzı güvenli sistemler gelmiş olabilir fakat bunlar şifrelendikten sonra geri dönüşü olmadığı için bu şekilde kullanım yapılamaz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir