PHP.ini Nedir?

PHP.ini Güvenliği Nedir? Ne İçin Yapılır ve Nasıl Sağlanır?

Giriş: PHP.ini Dosyası Nedir?

PHP.ini, PHP’nin davranışını ve ayarlarını kontrol eden bir yapılandırma dosyasıdır. Web sunucularında PHP ile çalışan web uygulamalarının güvenliğini ve performansını doğrudan etkiler. Örneğin, PHP’nin bellek kullanımı, dosya yükleme boyutu sınırları, hata raporlama düzeyi ve daha birçok ayar bu dosya aracılığıyla yönetilir. Ancak, yanlış yapılandırılmış bir PHP.ini dosyası, web sitenizi ve sunucunuzu ciddi güvenlik tehditlerine açık hale getirebilir. Bu nedenle, PHP.ini güvenliği, web geliştiricileri ve sunucu yöneticileri için kritik bir konudur.


PHP.ini Güvenliği Neden Önemlidir?

PHP’nin dünya genelinde web sitelerinin %77’sinden fazlasında kullanıldığı göz önüne alındığında, PHP.ini güvenliğini sağlamak hayati önem taşır. PHP.ini dosyası, şu nedenlerle güvenli bir şekilde yapılandırılmalıdır:

  • Veri Güvenliği: Yanlış yapılandırmalar, kullanıcı verilerinin çalınmasına veya değiştirilmesine yol açabilir.
  • Sunucu Güvenliği: Zararlı komutların yürütülmesine olanak tanıyabilir ve sunucunun kontrolünü kaybetmenize neden olabilir.
  • Performans ve Stabilite: Yanlış bellek ve kaynak kullanımı ayarları, sunucu çökmesine veya performans sorunlarına neden olabilir.
  • Hata Bilgileri ve Bilgi Sızıntıları: Varsayılan hata raporlama ayarları, sunucu yapısı ve dosya yolları hakkında saldırganlara ipucu verebilir.

PHP.ini Güvenliği Nasıl Sağlanır?

PHP.ini dosyasını güvenli bir şekilde yapılandırmak için dikkat edilmesi gereken birkaç ana konu vardır. İşte adım adım PHP.ini güvenliği sağlama yöntemleri:


1. Hata Raporlama ve Görüntüleme Ayarları

PHP’de oluşan hatalar varsayılan olarak ekranda gösterilebilir ve bu, sunucunuz hakkında hassas bilgiler verebilir. Hata raporlamayı yönetmek için şu ayarları yapabilirsiniz:

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
  • error_reporting: Hangi hata türlerinin raporlanacağını belirler. E_ALL tüm hataları raporlar ancak E_NOTICE, E_DEPRECATED ve E_STRICT hatalarını hariç tutarak gereksiz uyarıları engeller.
  • display_errors: Hataların ekranda gösterilmesini kapatarak bilgi sızıntılarını önler.
  • log_errors: Hataları ekrana göstermek yerine log dosyasına kaydeder.
  • error_log: Hataların kaydedileceği log dosyasının yolunu belirtir.

Bu ayarlar, kullanıcıların hata mesajlarını görmesini engelleyerek web uygulamanızın saldırganlar tarafından keşfedilmesini zorlaştırır.


2. Güvenlik Açığı Olan Fonksiyonları Devre Dışı Bırakma

PHP, bazı potansiyel olarak tehlikeli işlevler içerir. Bu işlevleri devre dışı bırakmak, uzaktan komut yürütme ve kötü amaçlı dosya yüklemelerini önler.

disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec
  • exec, shell_exec, system: Sunucuda kabuk komutları çalıştırabilir ve ciddi güvenlik açıklarına yol açabilir.
  • proc_open, popen: Harici işlemler başlatabilir.
  • curl_exec, curl_multi_exec: Uzaktan veri çekmeye olanak tanır ve saldırganlar tarafından kötüye kullanılabilir.

Bu fonksiyonları devre dışı bırakmak, sunucunuzda zararlı komutların çalıştırılmasını büyük ölçüde zorlaştırır.


3. Dosya Yükleme ve Kayıt Ayarları

Dosya yüklemeleri genellikle saldırı yüzeyi oluşturur. Özellikle zararlı dosyaların yüklenmesi, web shell çalıştırılması gibi güvenlik tehditlerine neden olabilir.

file_uploads = On
upload_max_filesize = 2M
post_max_size = 2M
  • file_uploads: Dosya yüklemelerini açar veya kapatır. Eğer web uygulamanız dosya yükleme gerektirmiyorsa, Off yaparak kapatmak güvenli bir tercihtir.
  • upload_max_filesize: Yüklenebilecek maksimum dosya boyutunu belirler. Sadece gerekli boyut kadar izin vermek güvenliği artırır.
  • post_max_size: Dosya yüklemeleri form gönderimi ile yapılırsa, POST isteğinin maksimum boyutunu belirler.

Eğer dosya yüklemeleri kapatılamıyorsa, sadece belirli dosya türlerine izin vermek ve yüklenen dosyaları public_html dışında tutmak da iyi bir güvenlik önlemidir.


4. URL Dosya Dahil Etme ve Açma İşlevlerini Kapatma

URL tabanlı dosya dahil etme işlevleri, uzaktan zararlı kodların yüklenmesine neden olabilir. Bunu engellemek için:

allow_url_fopen = Off
allow_url_include = Off
  • allow_url_fopen: PHP’nin uzak URL’leri fopen() ile açmasını engeller.
  • allow_url_include: Uzak URL’lerden include() ve require() yapılmasını kapatır.

Bu ayarlar, uzak sunuculardan dosya çağırarak kötü amaçlı kodların çalıştırılmasını önler.


5. Session Güvenliği ve open_basedir Kullanımı

Session ID hırsızlığı ve dizin erişimi sınırlaması için şu ayarları yapabilirsiniz:

session.cookie_httponly = 1
session.cookie_secure = 1
open_basedir = "/var/www/:/tmp/"
  • session.cookie_httponly: JavaScript ile cookie’ye erişimi engeller.
  • session.cookie_secure: Sadece HTTPS üzerinden cookie gönderilmesini zorunlu kılar.
  • open_basedir: PHP’nin erişebileceği dizinleri sınırlar ve böylece saldırganların diğer dizinlerdeki dosyalara erişimi engellenir.

Bu ayarlar, Session hijacking ve dizin erişimi risklerini en aza indirir.


6. PHP Versiyonu ve Güvenlik Güncellemeleri

Eski PHP sürümleri, güvenlik açıkları içerdiği için tehlikelidir. PHP’nin en güncel, desteklenen sürümünü kullanarak bu açıkları kapatabilirsiniz. Ayrıca:

expose_php = Off
  • expose_php: PHP sürüm bilgisini HTTP başlıklarından kaldırır ve saldırganların sitenize yönelik özel exploit’leri kullanmasını zorlaştırır.

Sonuç ve Öneriler

PHP.ini güvenliği, web sitenizin güvenliği ve performansı için kritik öneme sahiptir. Özellikle:

  • Hata raporlamalarını kapatmak ve log dosyalarına yönlendirmek,
  • Tehlikeli fonksiyonları devre dışı bırakmak,
  • Dosya yüklemelerini sınırlandırmak ve güvenli dizinler kullanmak,
  • URL dosya dahil etme ve açma işlevlerini kapatmak,
  • Session güvenliği için cookie ayarlarını optimize etmek,
  • Güncel PHP sürümünü kullanmak ve sürüm bilgilerini gizlemek,

PHP uygulamalarınızın güvenliğini büyük ölçüde artıracaktır. Bu ayarları uygularken, değişiklikleri küçük adımlarla yaparak ve her adımda test ederek ilerlemek, olası uyumsuzlukları veya hata mesajlarını önlemeye yardımcı olur.

Unutmayın: Her web uygulaması farklı gereksinimlere sahip olabilir, bu yüzden PHP.ini güvenlik ayarlarını kendi ihtiyaçlarınıza göre özelleştirmeniz önemlidir.

PHP güvenliğinizi bir adım öteye taşımak ve saldırılara karşı daha güçlü bir savunma hattı oluşturmak için bu rehberi uygulamaya hemen başlayabilirsiniz.

You may also like