PHP 8 Hakkında WordPress Kullanıcılarının Bilmesi Gerekenler
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ü. 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 bulunmaktadır. Bu yazı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şanabilmektedir. 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şebilmektedir. Ö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 giderilecektir.
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. 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ülmektedir.
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. Ayrıca 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

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 verilmektedir. 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 bekleyebilmektedir. Eğer bu kütüphaneler PHP 8 ile uyumlu olacak şekilde güncellenmez ise; bu kitaplıkların alternatiflerini kullanmak hatta PHP 8 uyumlu olması için temalarla eklentileri sıfırdan yazmak gerekebilmektedir.
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ırlanmıştır. Eğer bir geliştiriciyseniz mutlaka okumanızı öneriyoruz.
PHP 8 Hakkında WordPress Kullanıcılarının Bilmesi Gerekenler – 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 getirilmektedir.
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ılabilmektedir. 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ştir. 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 olabilmektedir. Ö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ılabilmektedir. Bu şekilde kullanılan 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 yararlanmaktadır. 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 çıkabilmektedir.
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ırakabilmektedir. Bu yaygın temalardan ve eklentilerden çok, daha az web sitesi tarafından kullanılan tema ve eklentilerde görülebilmektedir. Geliştiricisi tarafından terk edilen eklentilerde ve temalarda çıkacak olan güvenlik açıkları genellikle düzeltilemez. 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üveniliyor. Bu tarzdaki zararlı dosyalar PHP 8 kurulu ortamda çalışmayı bırakır. Ayrıca kendisini ele verir. Ya da zaman içerisinde kötü amaçlı yazılım yazarları tarafından uyumlu olacak şekilde geliştirilmeye devam edilmektedir.
PHP 8 Hakkında WordPress Kullanıcılarının Bilmesi Gerekenler – Performans Değişiklikleri
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 derlenemez; aksine çalışma esnasında makine koduna çevrilmektedir. Ö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 edilmektedir. Ayrıca aynı kod tekrar kullanıma sunulacaksa uygun şekilde optimize edilmektedir. 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ılabilecektir. Ayrıca ortaya çıkacak performans iyileştirmesi maalesef minimum düzeyde olacaktır. 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ğildir.

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 çıkabilmektedir. PHP 7.4 sürümü 2019 yılının Kasım ayında yayınlandı. Ayrıca 7.4 sürümündeki hataların Kasım 2021’e kadar düzeltileceği bilinmektedir. Kasım 2022’ye kadar da güvenlik sorunları düzeltildikten sonra yaşam döngüsünün sonuna gelinecektir. 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.
PHP 8 Hakkında WordPress Kullanıcılarının Bilmesi Gerekenler Sonuç
PHP’nin şu ana kadar görmüş olduğu en kapsamlı değişim ve geçiş olacaktır. 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.