Mertcan Erdoğan

Dosya yükleme boyutu arttırma ve çalışma süreleri hakkında riskleri anlatacağız. Risklerden başlayalım:

1️⃣ upload_max_filesize 128M (Maksimum Dosya Yükleme Boyutu)

✅ Faydası: Kullanıcıların büyük dosyalar (örneğin yüksek çözünürlüklü videolar veya resimler) yüklemesine olanak tanır.

⚠️ Riskleri:

  1. Disk Alanı Tükenebilir 🛑
    • Kullanıcılar çok büyük dosyalar yüklerse, sunucunun depolama alanı hızla dolabilir.
    • Bu, sunucunun çökmesine veya yavaşlamasına neden olabilir.
  2. DDoS ve Kötüye Kullanım Tehlikesi 🔥
    • Kötü niyetli kullanıcılar, çok büyük dosyalar yükleyerek sunucunun diskini doldurabilir ve hizmet kesintisine neden olabilir.
    • Özellikle kamuya açık bir dosya yükleme sistemi kullanıyorsan, bu büyük bir güvenlik açığı olabilir.

🎯 Çözüm:

  • Kullanıcıların dosya boyutu sınırlarını mantıklı belirle (Örneğin, 50MB yerine 128MB gerçekten gerekli mi?)
  • Dosya türü kısıtlamaları uygula (Sadece .jpg, .png, .mp4 gibi güvenli formatları kabul et).
  • Yüklenen dosyaları periyodik olarak temizleyen bir cron job yaz.

2️⃣ post_max_size 128M (Maksimum POST Verisi Boyutu)

✅ Faydası: Büyük dosya yüklemeleri veya formlar için gereklidir.

⚠️ Riskleri:

  1. Hafıza Tüketimi 🛑
    • Sunucu, büyük POST isteklerini işlemek için çok fazla RAM kullanabilir.
    • Eğer birden fazla kullanıcı aynı anda büyük dosyalar yüklüyorsa, sunucu yanıt vermeyi durdurabilir.
  2. Sistem Çökmesi 💥
    • Kullanıcı büyük bir POST isteği başlatıp yarıda bırakırsa, sunucu RAM’i gereksiz yere tahsis edebilir.
    • Bu da işlem kuyruğunun dolmasına ve sitenin çökmesine neden olabilir.

🎯 Çözüm:

  • Gerçekten büyük POST verisine ihtiyacın var mı? Belki daha küçük parçalar halinde yükleme yapılabilir.
  • Dosya yüklemelerinde chunking (parça parça yükleme) kullanabilirsin (örneğin AJAX ile).
  • POST yerine streaming tabanlı yükleme çözümleri araştırılabilir.

3️⃣ max_execution_time 300 (PHP Betiğinin Maksimum Çalışma Süresi – 5 Dakika)

✅ Faydası: Uzun süren işlemleri (büyük dosya işleme, yedekleme, video işleme) tamamlamaya izin verir.

⚠️ Riskleri:

  1. Sunucu Kaynaklarını Engelleyebilir 🔥
    • Eğer bir PHP betiği 5 dakika boyunca çalışıyorsa, diğer işlemleri bloke edebilir.
    • Bu, sunucunun diğer istekleri işlemesini geciktirebilir.
  2. Sonsuz Döngü ve Sunucu Çökmesi 🛑
    • Eğer betik bir hata nedeniyle sonsuz döngüye girerse, 5 dakika boyunca boşuna işlem yapar ve sunucuyu yorar.
    • Bu durum, yüksek CPU kullanımı ve sunucu çökmesi gibi sorunlara yol açabilir.

🎯 Çözüm:

  • Gerçekten uzun süren işlemler için asenkron işlem kullan (background job).
  • Kodun içinde zaman hesaplamaları yaparak işlem süresini kontrol et (set_time_limit(60) gibi).
  • Sonsuz döngüleri ve uzun süren SQL sorgularını optimize et.

4️⃣ max_input_time 300 (PHP’nin Giriş Verisini Okuma Süresi – 5 Dakika)

✅ Faydası: Büyük veri işleyen API’ler veya uzun süren dosya yüklemeleri için gereklidir.

⚠️ Riskleri:

  1. Sunucu Kaynaklarını Gereksiz Yere Kullanabilir 🔥
    • Kullanıcı bir yükleme başlatır ve ağ bağlantısını keserse, PHP 5 dakika boyunca boşuna veri bekler.
    • Bu, bağlantı kaynaklarının gereksiz yere harcanmasına neden olur.
  2. Güvenlik Açığı Oluşturabilir 🛑
    • Kötü niyetli bir saldırgan, sunucuya devasa POST istekleri göndererek sunucu kaynaklarını tüketebilir.
    • Yüksek max_input_time değeri, brute force saldırılarına karşı zayıflık yaratabilir.

🎯 Çözüm:

  • Gerçekten 5 dakika boyunca giriş verisini okumaya ihtiyacın var mı?
  • Daha kısa bir süre belirle (örneğin 60 saniye) ve işlemleri optimize et.
  • İstemcinin bağlantısını kontrol eden mekanizmalar ekle (örneğin WebSocket veya AJAX polling).

Sonuç ve Öneriler

  • Mümkün olduğunca düşük değerler kullanmaya çalış.
  • Dosya yükleme sınırını kullanıcı ihtiyacına göre ayarla (örneğin 128MB yerine 50MB düşünebilirsin).
  • Asenkron ve parçalı yükleme yöntemlerini araştır (örneğin AJAX + chunking).
  • Sunucunun aşırı yüklenmemesi için max_execution_time ve max_input_time değerlerini makul seviyede tut.

Bunları dikkate almazsan sunucun DDoS saldırılarına açık hale gelebilir, disk dolabilir, RAM ve CPU tüketimi artabilir, hatta sitende kesintiler yaşanabilir. 🚨

Wordrpess Dosya Yükleme Boyutu Arttırma işlemi

1️⃣ php_value upload_max_filesize 128M

Anlamı:

Bu ayar, PHP üzerinden yüklenebilecek maksimum dosya boyutunu belirler.

128M ne demek?

128 Megabayt (MB) sınırı konulmuş. Yani kullanıcı, en fazla 128MB boyutunda bir dosya yükleyebilir.

Örnek Kullanım:

Eğer bir kullanıcı 200MB’lık bir video yüklemeye çalışırsa, yükleme başarısız olur çünkü upload_max_filesize sınırı 128MB olarak belirlenmiştir.


2️⃣ php_value post_max_size 128M

Anlamı:

Bir form gönderilirken (POST yöntemiyle) gönderilebilecek maksimum veri boyutunu belirler.

128M ne demek?

Form üzerinden gönderilecek toplam veri miktarı en fazla 128MB olabilir.

Neden Önemli?

Dosya yükleme formları da POST yöntemiyle çalıştığından, post_max_size değeri upload_max_filesize değerinden büyük veya eşit olmalıdır. Aksi halde büyük dosya yükleme işlemleri başarısız olur.


3️⃣ php_value max_execution_time 300

Anlamı:

Bir PHP dosyasının maksimum çalışabileceği süreyi (saniye cinsinden) belirler.

300 ne demek?

PHP betiği 300 saniye (5 dakika) boyunca çalışabilir. Eğer bir işlem 5 dakikayı aşarsa, PHP otomatik olarak işlemi durdurur ve “Maximum execution time exceeded” (Maksimum yürütme süresi aşıldı) hatası verir.

Neden Gerekli?

  • Büyük dosyalar yüklenirken uzun sürebilir.
  • Büyük veritabanı sorguları zaman alabilir.
  • Büyük resim/video dosyaları işlenirken sürenin uzun olması gerekebilir.

4️⃣ php_value max_input_time 300

Anlamı:

PHP’nin gelen veriyi işlemek için harcayabileceği maksimum süreyi (saniye cinsinden) belirler.

300 ne demek?

PHP, formdan veya dosya yükleme işleminden gelen verileri 300 saniye (5 dakika) boyunca okuyabilir ve işleyebilir.

Farkı Ne?

  • max_execution_time: Kodun tüm çalışma süresi
  • max_input_time: Yalnızca giriş verisinin okunma süresi

Eğer bir kullanıcı büyük bir dosya yüklüyorsa ve sunucu veriyi okumak için çok zaman harcıyorsa, bu değer artırılabilir.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir