WhatsApp ile yaz
← Blog

Dosya Yükleme Güvenliği Nedir?

📅 19.10.2026

PHP ile dosya yükleme, web uygulamalarının sık karşılaştığı bir işlevdir. Ancak, hatalı uygulandığında sunucuya zararlı dosyalar yüklenebilir, veritabanı bütünlüğü zarar görebilir ve kullanıcı verileri tehlikeye girebilir. Güvenli dosya yükleme, yalnızca izin verilen dosya tiplerini kabul etmekle kalmaz, aynı zamanda dosya boyutunu sınırlamak, geçici isimlendirme yapmak ve dosyaları web kökünden ayrı bir dizinde saklamak da gerektirir.


Temel Tehditler ve Riskler

Dosya yükleme sırasında karşılaşılan başlıca tehditler şunlardır:

  • Dosya Tipi Değiştirme (File Type Spoofing)
  • Dosya Boyutu Sınırının Aşılması (Size Limit Bypass)
  • Dosya İsiminde Yol Traversal (Path Traversal)
  • PHP veya Diğer Çalıştırılabilir Kod Yükleme
  • Dosya İçeriğinde Zararlı Kod (Malware Injection)

İzin Verilen Dosya Tiplerini Belirleme

İlk adım, sadece güvenilir dosya tiplerini kabul etmektir. MIME tipini kontrol etmek yanıltıcı olabilir; bu yüzden dosyanın gerçek uzantısını ve içerik türünü doğrulamak gerekir. PHP’nin finfo sınıfı, dosyanın gerçek MIME tipini tespit etmek için idealdir.


Örnek Kod: MIME Tipi Kontrolü


Dosya Boyutunu Sınırlama

Sunucu tarafında maksimum dosya boyutu belirlemek, bellek tüketimini kontrol altına alır. PHP’nin upload_max_filesize ve post_max_size ayarları ile birlikte, kod içinde de ek kontrol yapılmalıdır.


Örnek Kod: Boyut Kontrolü

 $maxSize) {
    die('Dosya boyutu 5 MB sınırını aşıyor.');
}
?>

Dosya İsimlerini Temizleme ve Rastgeleleştirme

Dosya isimleri, özel karakterler, yol traversal dizeleri (../) içerebilir. Bunları temizlemek için basename kullanmak ve dosya adını rastgele oluşturmak en güvenli yöntemdir.


Örnek Kod: Güvenli Dosya Adı Oluşturma


Dosyaları Web Kökünden Ayrı Bir Dizinle Saklama

Yüklenen dosyaların web kökünde bulunması, doğrudan erişim yoluyla çalıştırılmasını sağlar. Dosyaları public olmayan bir dizinde saklamak ve gerekiyorsa PHP üzerinden erişim sağlamak en iyi uygulamadır.


Dosya Erişim İzinlerini Sıkılaştırma

Dosya ve dizin izinleri, yalnızca gerekli erişim için ayarlanmalıdır. Genellikle 0644 izinleri yeterlidir; ancak bazı durumlarda 0600 tercih edilebilir.


Dosya İçeriğini Tarama

Antivirüs motorları veya dosya içeriği tarama kütüphaneleri kullanarak yüklenen dosyaların zararlı olup olmadığını kontrol etmek ek bir koruma katmanı sağlar. PHP için ClamAV entegrasyonu yaygındır.


Hata Yönetimi ve Loglama

Hataları kullanıcıya gizli tutun; sadece genel bir mesaj gösterin. Aynı zamanda hata detaylarını log dosyasına kaydedin, böylece saldırı izleri takip edilebilir.


Sonuç

PHP ile dosya yükleme güvenliği, çok katmanlı bir yaklaşım gerektirir. Doğru MIME tipi kontrolü, dosya boyutu sınırı, isim temizleme, güvenli saklama ve izleme ile web uygulamanızı olası saldırılardan koruyabilirsiniz. Güvenlik, tek bir adımda tamamlama değil, sürekli bir süreçtir; bu nedenle kodunuzu düzenli olarak gözden geçirin ve güncel tehdit senaryolarına karşı koruma mekanizmalarınızı güncelleyin.