PHP
Güvenlik

2019'da Ulusal Güvenlik Açığı Veritabanı tarafından listelenen tüm güvenlik açıklarının %11'i PHP ile bağlantılıydı. Tarihsel olarak, 1996'dan bu yana bu veritabanıında listelenen tüm güvenlik açıklarının yaklaşık %30'u PHP ile bağlantılıdır. Dilin kendisinin veya çekirdek kitaplıklarının teknik güvenlik kusurları sık görülen bir durum değildir (2009'da 22, toplamın yaklaşık %1'i, ancak PHP listelenen programların yaklaşık %20'si için geçerlidir). Programcıların hata yaptığını kabul eden bazı diller, birçok soruna neden olan girdi doğrulama eksikliğini otomatik olarak tespit etmek için hata kontrolü içerir. Böyle bir özellik PHP için geliştirilmektedir, ancak bunun bir sürüme dahil edilmesi geçmişte birkaç kez reddedilmiştir.
Web barındırma ortamları için özel olarak tasarlanmış Suhosin ve Hardening-Patch gibi gelişmiş koruma yamaları bulunmaktadır.
Geçmişte, PHP'nin eski sürümlerinde bazı yapılandırma parametreleri ve bu tür çalışma zamanı ayarları için varsayılan değerler vardı, bu da bazı PHP uygulamalarını güvenlik sorunlarına açık hale getiriyordu. Bunlar arasında magic_quotes_gpc ve register_globals yapılandırma direktifleri en iyi bilinenleriydi; ikincisi, herhangi bir URL parametresinin PHP değişkenleri haline gelmesini sağladı ve bir saldırganın herhangi bir başlatılmamış global değişkenin değerini ayarlamasına ve bir PHP betiğinin yürütülmesine müdahale etmesine izin vererek ciddi güvenlik açıklarına yol açtı. "magic quotes" ve "register globals" ayarları desteği PHP 5.3.0'dan beri kullanımdan kaldırılmış ve PHP 5.4.0'dan silinmiştir.
Çalışma zamanı ayarları olası güvenlik açığına başka bir örnek, yüklenen dosyaların depolandığı dizin için PHP yürütmesinin devre dışı bırakılmamasından (örneğin engine yapılandırma direktifi kullanılarak) kaynaklanır. Bunun etkinleştirilmesi, yüklenen dosyalara yerleştirilmiş kötü amaçlı kodun yürütülmesine neden olabilir. En iyi uygulama, görüntü dizinini web sunucusunun kullanabileceği belge kökünün dışına yerleştirmek ve onu bir aracı komut dosyası aracılığıyla sunmak veya yüklenen dosyaları saklayan dizin için PHP yürütmesini devre dışı bırakmaktır.
Ayrıca, paylaşılan bir web barındırma ortamında PHP uzantılarının dinamik yüklenmesini etkinleştirmek (enable_dl yapılandırma yönergesi aracılığıyla) güvenlik sorunlarına yol açabilir.
Bazen programcının amacına aykırı olarak farklı değerlerin eşit olarak değerlendirilmesine neden olan ima edilen tip dönüşümleri güvenlik sorunlarına yol açabilir. Örneğin, '0e1234' == '0' karşılaştırmasının sonucu true 'dur çünkü sayı olarak ayrıştırılabilen dizeler sayılara dönüştürülür. Bu durumda, ilk karşılaştırılan değer sıfır olan (0×101234) değerli bilimsel gösterim olarak kabul edilir. Bunun gibi hatalar MD5 şifre karmaları karşılaştırıldığında Simple Machines Forum, TYPO3 ve phpBB'de kimlik doğrulama açıklarına neden oldu. Önerilen yol, hash_equals() (zamanlama saldırısı güvenliği için), strcmp veya kimlik operatörünü (===) kullanmaktır çünkü '0e1234' === '0' false ile sonuçlanır.
Zone-H tarafından yayınlanan 170.000'den fazla web sitesi tahrifatını kapsayan 2013 analizinde en sık kullanılan teknik (%53), çoğunlukla PHP dil yapılarının include, require ve allow_url_fopen'ın güvensiz kullanımıyla ilgili olan dosya ekleme güvenlik açığından yararlanılmasıydı.
23 Aralık 2023 itibarıyla (PHP 8.3 sürümünden 1 ay sonra) W3Techs, PHP kullanan web sitelerinin %85,9'unun 8.0 veya daha eski sürümleri kullandığını (bunlar artık PHP Geliştirme Ekibi tarafından desteklenmemektedir) bildirmektedir.
23 Aralık 2023 itibarıyla Sürüm 5 hâlâ tüm web sitelerinin %13,6'sı tarafından kullanılmaktadır. PHP 8.1 veya sonraki sürümlere geçiş yapılması ve rand() veya mt_rand(),, yerine random_int() kullanılması önemle tavsiye edilmektedir çünkü bu işlevler kriptografik açıdan güvensizdir. PHP entropi kaynakları üzerinden gerçekleştirilebilecek iki saldırı vardır: "tohum saldırısı" ve "durum kurtarma saldırısı". Mevcut GPU teknolojileriyle bir saldırgan, 250 ABD doları tutarındaki GPU ile saniyede 230'a kadar MD5 hesaplaması gerçekleştirebilirken, ek 500 ABD doları tutarındaki GPU ile 232'ye kadar hesaplamaya ulaşabilir.
"Doğum günü akını" ile birlikte bu durum ciddi güvenlik açıklarına yol açabilir.
LAMP yazılım paketine genel bir bakış, burada Squid ile birlikte gösterilmektedir
Dinamik web sayfası: sunucu tarafı komut dosyası oluşturma örneği (PHP ve MySQL)
Vikikitap