Güncel olmayan PHP uygulamaları ile (Örneğin: Eskiden 5.2 ile yazılımş ve MySQL’in 4 veya 5.0 versionları ile çalışan) sık sık karşılaşıyoruz. PHP sürekli gelişip değiştiğinde minor versionlar arasında bile  obselete olan bir çok fonksiyon, Ini direktifleri ve yeni özellikleri görmemiz mümkün. Web Hositng firmalarında host edilen uygulamalarda çok karşılaştığımız  senaryolar olmasına karşın bazen günlerce çözümünü bulamadığımızda oluyor.

Aşağıda tipik bir PHP ve MySQL uyglaması var. PHP 5.2 ve MySQL 5.0.1’de geliştirilmiş. MaestroPanel’e upgrade edildikten sonra PHP 5.6 ve MySQL 5.6.16 üzerinde çalışmaya başladı.

Doğal olarak sayfalarda onlarca  Notice ve Warning çıktı. Neyseki MaestroPanel’eden sadece kritik hataları göster diyerek onları bertaraf ettik.

php-error-reporting

Başka bir husus ise PHP’nin MySQL ile bağlantısında ortaya çıktı.

PHP’de Parametrized Query imkanı olmasına rağmen nedense PHP developer’lar bunu kullanmak istemiyor.  Bu nedenle major versiyon upgradelerinde uygulamalar çalışamaz hale geliyor ve uygulamaya göre sunucu konfigürasyonu ile saldırı yüzeyinin genişlemesine neden olabiliryor.

Aşağıda MySQL 5.0.1’de (NO_ENGINE_SUBSTITUTION) çalışabilen bir SQL sorgusunu görüyorsunuz.

$req = mysql_query('SELECT * FROM bayilik_istegi WHERE cevap_durum="" order by id DESC');

Dikkat ederseniz cevap_durum=”” boş sorgusunda double quta kullanılmış. MySQL 5.0 implementasyonunda bu kabul edilebilir bir davranış fakat MySQL 5.6’da gelen sql-mode özelliği ile beraber standart olarak ANSI geldiğinden sorgu çalışmıyor.

Bu sorgunun çalışması için MaestroPanel’de aşağıdaki adımları takip ettik.

%MaestroPanelPath%\MySQL\my.ini

dosyasını açarak sql-mode alanını NO_ENGINE_SUBSTITUTION olarak değiştirdik. Bu 5.0 implementasyonu ile uyumlu olduğundan PHP kodunda herhangi bir değişiklik yapmadan uygulamanın doğru çalışmasını sağladık. Fakat bu durum farklı PHP uygulamarında farklı tepkilere yol açabilir.

sql-mode-old-1

 

 

Tagged:

Yazar