Anasayfa Makale PHP 8 Hakkında WordPress Kullanıcılarının Bilmesi Gerekenler

PHP 8 Hakkında WordPress Kullanıcılarının Bilmesi Gerekenler

wordpress, php 8

PHP 8.0 ile beraber gelen yeniliklerin bir kısmını ve kullanmaya başlamadan önce WordPress kullanıcılarının bilmesi gerekenleri anlatıyoruz.

26 Kasım 2020 tarihinde piyasaya sürülen PHP 8.0 sürümü, Wordpress sitelerinin güç aldığı PHP’nin çıkan en son sürümü. Dildeki bu yeni güncelleme, geliştiricilerin işine yarayacak birçok yeni özellik ve uzun vadede güvenliği artıracak değişikliklerle beraber geldi.

Bu değişikliklerden en belirgin olanı bazı işlevlerin kaldırılması. PHP 8 sürümünde bir önceki sürümlere nazaran çok daha büyük değişiklikler bulunuyor. Bu yazımıda da WordPress güvenliği konusunda yıllarca sektörde var olan ve eklentileriyle bilinen Wordfence Security’nin makalesinde belirttiği hassas noktalara, önerilere göz atalım.

PHP 8’e Hemen Yükseltmeli Miyim?

Kesinlikle hayır.

Halihazırdaki WordPress’inizi stabil bir destek sunulana kadar yükseltmemelisiniz. WordPress geliştiricilerinin 18 Kasım tarihinde yaptıkları söyleşiye göre 5.6 sürümüyle beraber PHP 8 ile beta şeklinde uyum sağlanması planlanıyor. Şu anda da yakın zamanda yayınlanan en güncel olan sürüm WordPress 5.6 ve PHP 8 desteği gelmiş olsa bile birtakım sorunlar mevcut. Beta olarak piyasaya sürülen sürümde temel WordPress işlevleri çalışsa bile bir süreliğine bilinmedik hatalar, temalarda bozulma gibi birtakım sorunlar yaşanabilir. Bunu WordPress de hesaba katarak hataların olabildiğince çabuk test edilip kapatılabilmesi için PHP 8 kullanarak ek testler yapmaya başladı.

Halihazırda WordFence Security eklentilerinden birisini kullanıyorsanız, PHP 8 ile uyum için çalışmalar devam ediyor. Geliştiricilerin kendi blog sayfasından yapmış oldukları açıklamaya göre, kısmi uyumluluk ve destek sunulacak fakat stabil bir kullanım ve tam anlamıyla uyumluluk sağlanabilmesi için ek testler uygulanması gerekiyor..

Bütün bunların dışında birçok Wordpress tema ve eklentisinin PHP 8 sürümüyle hemen uyumlu olmayacağını üstünü çizerek belirtmek isteriz. Normal bir kullanımda görünüşte hiçbir sorun gözükmese bile arka planda olumsuz şeyler gerçekleşiyor olabilir. Öte yandan WordPress’in 5.7 sürümünün PHP 8 ile tam uyumlu olmasını bekliyoruz ki Mart 2020’de çıkacak bu sürüme kadar muhtemelen PHP 8.0.1 sürümü de çıkmış ve ilk hatalar giderilmiş olacak.

PHP 8 Hangi Önemli Değişiklikleri İçerir?

Geliştiricilerin bir kısmı uzun zamandır PHP’nin bazı diğer alternatiflere kıyasla çok daha güvensiz olduğunu düşünüyordu. Bu halen tartışmaya açık bir mevzu zira herhangi bir programlama dilinin/web programlama dilinin güvenlik açısından ne derece güvenli veya güvensiz olduğunu anlamak zor. Yine de PHP 8’den önceki PHP sürümlerine bakıldığında, yeni sürüm eskilerde olduğu gibi bazı kod hatalarına karşı toleranslı davranmıyor. Eski sürümlerde küçük hatalar olması durumunda hatanın ne olduğuna bağlı olarak kodlar çalışmaya devam edebiliyordu. Bundan ötürü güvenliğin biraz daha sıkılaşmış olduğu düşünülüyor.

PHP 8 sürümü ayrıca diğer PHP sürümlerine nazaran çok daha sert bir yazım türü kullanmaya başlıyor. Fonksiyonların kabul ettiği ve çalıştırdıkları döngülere artık daha çok dikkat edilmeye başlanıyor ve kullanıcıdan alınan girdilerin nasıl değerlendirildiği biraz daha önem kazanıyor. Daha önceleri çeşitli bildirimler halinde kendisini belli eden sorunlardan ziyade uyarılar ortaya çıkıyor. Uyarılar halinde çıkanlar ise artık doğrudan hata olarak gösteriliyor. Böylece kod yapısı daha temiz ve iyi bir hale getirilmiş oluyor.

Özetle PHP 8 sürümünün diğer sürümlere nazaran pek de esnek bir yapıya sahip olmadığını söyleyebiliriz. Önceki sürümlerde hatalı kodun çalıştırılması bu kadar zor değildi.

Ayrıca PHP 7.x sürümüyle tedavülden kaldırılan bazı fonksiyonlar ve çeşitli özellikler bu sefer PHP 8 ile beraber daha kesin bir şekilde tamamen kaldırılıyor:

  • $php_errormsg değişkeni
  • create_function() fonksiyonu
  • mbstring.func_overload ini yönergesi
  • real tip
  • allow_url_include ini yönergesi
  • restore_include_path() fonksiyonu
  • each() fonksiyonu
PHP 8
PHP 8 sürümü 24 Kasım 2020’de çıkmıştı.

WordPress Eklentileri ve Temalar Nasıl Etkilenecek?

Bu değişkenler, fonksiyonlar ve yönergelerin artık pek kullanılmadığını bilsek de, Wordfence tarafından yapılan araştırmaya göre create_function kullanan ve milyonlarca web sitesi tarafından kullanılan popüler 5.000 kadar WordPress eklentisi mevcut. Bu durumda yükseltme yapmanız durumunda sorun yaşama ihtimaliniz oldukça yüksek. Yine de bazı durumlar için eski PHP sürümleriyle uyumluluk adına bunların kullanımına izin verilmiş olabilir. Her şeye rağmen birçok eklenti maalesef PHP 8’e geçişte kapsamlı şekilde düzenlenmezse, sorunlara neden olacak.

Çok az sayıdaki eklentiler ve temalar da genellikle üçüncü taraf kütüphanelerden yararlanır. WordPress geliştiricileri uyumluluk için bunların da güncellenmesini bir süre daha bekleyebilir. Eğer bu kütüphaneler PHP 8 ile uyumlu olacak şekilde güncellenmez ise, bu kitaplıkların alternatiflerini kullanmak hatta ve hatta PHP 8 uyumlu olması için temalarla eklentileri sıfırdan yazmak gerekebilir.

Yoast SEO eklentisinin geliştiricileri tarafından bu geçiş sürecinde diğer geliştiriciler tarafından neler yapılması gerektiğine dair birtakım öneriler ve uyumluluk raporları hazırlandı. Eğer bir geliştiriciyseniz mutlaka okumanızı öneriyoruz.

PHP 8 Hakkındaki Güvenlik Endişeleri

Güvenlik açısından sorun çıkartan birçok fonksiyon ve özellik PHP 8 ile daha önceki paragraflarda belirtildiği gibi kaldırılmış olsa da, insan elinden çıkan her şeyde olduğu gibi çeşitli hataları ve kusurları da hesaba katmak gerekiyor. Her yeni sürümün çıkmasının ardından bu tarz endişeler dile getirilir.

PHP, “Type Juggling” adı verilen bir şeye müsaade ediyor. Bu özellik sayesinde sayı içeren dizeleri tam sayı veya ondalık sayılarla aynı şekilde ele almaya yarayan ve katı karşılaştırmaya yarayan operatörü === yerine == kullanılması durumunda bu iki farklı tür arasında matematiksel karşılaştırma yapılabilir demektir. Bu birçok geliştirici için özünde faydalı olabilirken, bazen de yazılımda alışılmamış davranışların meydana gelmesine neden olabilir.

Type Juggling’in neden soruna yol açabileceğine WordFence makalesinde güzelce değinmiş. Klasik bir örnek olan 0==”blah” değeri true olarak dönerken, PHP 8 düzeltme amacıyla bu tarz davranışları düzene sokmaya çalışırken hatalara neden olabilir. Örneğin 0==”0blah” false olarak döndürülebilir.

Temelde bu güvenliği artıracaktır fakat standart olmayan cookie ile tanımlama bilgilerini kullanarak parola kontrollerini atlamak amacıyla PHP’nin “Type Juggling” özelliğinin davranışı kullanılabilir ve bu şekilde kullanılabilecek bir dizi istismar var. Ek olarak çok sayıda eklenti veya çeşitli ek bileşen kritik işlevler için gevşek karşılaştırmalardan yararlanıyor. Bunlar genelde PHP 8 sürümüne yükseltme sonrası kullanılmaya devam edilecek fakat bu durumdan ötürü yeni güvenlik açıkları da ortaya çıkabilir.

Ayrıca PHP 7.x sürümünden 8’e geçiş esnasında eklenti geliştiricileri ve bazı tema geliştiricileri kod güncellemek için uğraşmak yerine, desteği keserek atıl halde bırakabilir. Bu yaygın temalardan ve eklentilerden çok, daha az web sitesi tarafından kullanılan tema ve eklentilerde görülebilir. Geliştiricisi tarafından terk edilen eklentilerde ve temalarda çıkacak olan güvenlik açıkları genellikle düzeltilmez. Bu da büyük bir güvenlik riskidir.

Diğer bir güvenlik riski de geliştiricilerden çok barındırıcı ve site sahipleri yüzünden ortaya çıkar. Eski eklentilerini sağlıklı bir şekilde çalıştırmak için web sitesi sahipleri güvensiz olan eski PHP sürümlerinde kalmaya devam edebilirler. Bütün bunların dışında bazı zararlı yazılımlar niyetlerini gizlemek amacıyla PHP’nin hata toleransı özelliğiyle kaldırılmış olan fonksiyonlarına da güveniyor. Bu tarzdaki zararlı dosyalar PHP 8 kurulu ortamda ya çalışmayı bırakır ya da kendisini ele verir. Ya da zaman içerisinde kötü amaçlı yazılım yazarları tarafından uyumlu olacak şekilde geliştirilmeye devam edilir.

PHP 8 ile Gelen Performans Değişiklikleri

PHP 8 ile beraber gelen heyecan verici bir diğer özellik ve gelişme ise JIT veya tam adıyla “Just In Time / Tam Zamanında” derleme. PHP bildiğiniz gibi yorumlanan bir dil. Yani derlenmez, aksine çalışma esnasında makine koduna çevrilir. Örneğin bu şekilde çalışan diğerlerinden örnek bir programlama dili ise Python’dur.

JIT özelliği sayesinde sıkça kullanılan kodun kayıtları tutulmaya devam edilir ve aynı kod tekrar kullanıma sunulacaksa uygun şekilde optimize edilir. Bu, belirli fonksiyonların kullanıldığı yapılarda çok büyük performans artışı sağlar. JIT’in JavaScript gibi diğer dillerde de kullanılmaya başlanıp, eklenmesinden sonra yeni uygulamaların adeta patlamasına neden olmuştur. Örneğin JavaScript yardımıyla çalışan ve kullanıcıyla etkileşime giren sanal makineler web sitelerinin oluşmaya başladığı ilk günlerde hayal bile edilemiyordu. Artık geçmişte sunucuya belirli görevleri yerine getirtmek için saf PHP kütüphanelerini kurmak da daha pratik hale geldi.

Bütün bunlar bir yana, WordPress gibi web içerik yönetim sistemleri için yapılabilecek ve ortaya çıkacak performans iyileştirmesi maalesef minimum düzeyde olacak. Ortalama bir WordPress kullanıcısının veya geliştiricilerin bu yeni özellikten yararlanmaları oldukça uzun zaman alacak gibi gözüküyor. Her ne kadar bütün bu güzel özellikler geliştiricilerin işini kolaylaştırsa da, WordPress sitelerinde geriye yönelik olan uyumluluk bozulacağından, gelecekte yayınlanacak tema ve eklentilerde bu özelliklerden yararlanılması pek ihtimal dahilinde değil.

php 8

Geliştiricilerin Kodları PHP 8 için Güncellemeleri Ne Kadar Sürer?

Her PHP sürümünün ortalama iki senelik bir yaşam döngüsü var. Bu döngüye hataların giderilmesi ve güvenlik açıklarının da kapatılması dahil edilirse bu süre üç seneye çıkabilir. PHP 7.4 sürümü 2019 yılının Kasım ayında yayınlandı ve 7.4 sürümündeki hataların Kasım 2021’e kadar düzeltileceği biliniyor. Kasım 2022’ye kadar da güvenlik sorunları düzeltildikten sonra yaşam döngüsünün sonuna gelinecek. Bu nedenle Kasım 2022 tarihini PHP 7.x sürümünün kesin sonlandırılma tarihi olarak düşünebiliriz. Bu hesaptan 2022 yılına kadar web uygulamalarının en az PHP 8.0 ile veya daha risksiz ve güncel sürümü destekliyor olmaları gerek.

Sonuç

PHP 8’e tam anlamıyla geçiş, PHP’nin şu ana kadar görmüş olduğu en kapsamlı değişim ve geçiş olacak. Uzun vadece buna değecek değişiklikler ve yenilikler gelmiş olsa da, WordPress site sahipleri ila geliştiriciler de bu kısa zaman diliminde uyum açısından zorlanabilirler. Eğer bir web sitesi sahibiyseniz, öncelikle temalarınızın ve eklentilerin uyumlu şekilde güncellenip güncellenmediğini, hatta güncelleme alıp almayacağını kontrol edin. Uyum sağlayamayan ve terk edilen eklentiler varsa, alternatiflere bakmaya başlayabilirsiniz.

Özetle, bu yazıda PHP 8 ile gelen değişikliklerden, WordPress site sahiplerinin bundan nasıl etkileneceğine detaylıca göz attık. Sorularınız varsa Technopat Sosyal’de konu açabilir, eklemek istediğiniz bir şey varsa yorumlarda belirtebilirsiniz.