Dosya yükleyici

Neden dosya yükleme risk içerir?

Kullanıcıdan dosya alma yöntemi kullanışlıdır, ancak uygun şekilde tasarlanmadığında ciddi bir güvenlik açığı haline gelir. Saldırganlar, yüklemeyi kötüye kullanarak rastgele kod çalıştırma, sunucu kapasitesinin tükenmesi, yetkisiz dosya dağıtımı gibi girişimler yaparlar.

Temel tehditler şöyledir:

  • Web Shell yükleme/çalıştırma — Kötü niyetli bir script yükleyerek uzaktan kontrol sağlama.
  • Zararlı yazılım içeren dosyalar — Diğer kullanıcılara bulaştırarak ikincil zararlar.
  • Path Traversal — Hatalı bir yol belirtimiyle beklenmeyen bir yere kaydedilir.
  • DoS (ZIP bombası, büyük dosya) — Depolama veya işlem kapasitesini tüketme.
  • Uzantı/MIME sahteciliği — .jpg.php gibi çift uzantılı veya Content-Type sahteciliği ile atlatma.
  • Önizleme üzerinden XSS — SVG/HTML önizleme sırasında script çalıştırılması.

Alınacak önlemlerin temeli "çok katmanlı savunma (defense in depth)" dır. Tek bir önleme bağımlı kalmamak, birden fazla savunma katmanını üst üste koymak işe yarar bir tasarımdır.

Önlemler: Tasarım aşamasında dikkat edilmesi gereken ilkeler

Uzantı ve MIME tipi katı kontrol (Beyaz liste yöntemi)

İzin verilen uzantıları sınırlayın ve kabul edilme durumunu yalnızca uzantıya dayandırmayın. Dosyanın imzasını (büyülü sayı) kontrol ederek içeriğini doğrulamalısınız. Content-Type başlığına güvenmeyin ve çift uzantılar veya NULL bayt gibi atlatma yöntemlerini engelleyecek işlemler uygulayın.

Dosya adının güvenli hale getirilmesi ve yeniden adlandırılması

Kullanıcının sağladığı dosya adını olduğu gibi saklamayın. UUID veya hash + zaman damgası gibi yöntemlerle benzersiz bir isimle değiştirin ve orijinal dosya adını ayrı bir meta veri olarak saklama tasarımı güvenlidir. Özel karakterler ve uzunluk sınırlamaları da işleme alınmalıdır.

Kayıt yeri ve yetki kontrolü

Yüklenen dosyalar web kökündeki alan dışına kaydedilmeli ve doğrudan çalıştırılmaması önemlidir. Mümkünse özel bir nesne depolama alanına (örneğin: S3) kaydedin ve uygulama üzerinden indirme bağlantısı oluşturun. Kayıt dosyası klasörleri, yürütme izinleri verilmeden yalnızca okuma/yazmaya en az izinle sınırlı olmalıdır.

Boyut sınırları ve eşzamanlı yükleme kontrolü

Dosya boyutu sınırını belirleyin ve eşzamanlı yükleme sayısını veya oran kontrolünü uygulayarak hizmetin kullanılabilirliğini güvence altına alın. Sıkıştırılmış dosyalar (ZIP vb.) kabul edildiğinde, her dosya da açıldıktan sonra kontrol edilmelidir.

Zararlı yazılım taraması ve içerik zararsız hale getirme (CDR)

Yüklemeden hemen sonra virüs taraması (mümkünse birden fazla motor) gerçekleştirin ve PDF/Office belgelerini CDR (İçerik Yeni Düzenleme & Yeniden Yapılandırma) ile zararsız hale getirin. Görüntüleri yeniden kodlama (okuma → yeni dosya oluşturma) yaparak gömülü zararlı verilerin kaldırılması etkili olacaktır.

HTTPS / İletişim koruması ve CSRF önlemleri

İletişim her zaman TLS (HTTPS) ile korunmalı ve CSRF token gibi önlemler uygulanmalıdır. İndirme yanıtına Content-Disposition: attachment ve X-Content-Type-Options: nosniff ekleyerek tarayıcıdaki yanlış işlevleri önleyin.

Loglama, denetim ve uyarı mekanizması

Kimlerin ne zaman hangi dosyayı işlediğini ayrıntılı bir şekilde log olarak saklayın ve anormal davranışlar (yüksek frekanslı yükleme veya çok sayıda reddetme) için uyarılar ayarlayın. Dosya bütünlüğü için hash saklamak da faydalıdır.

Güvenlik testleri ve penetrasyon testleri

Uygulamadan sonra dosya yüklemeye özel güvenlik testleri (shell ekleme, uzantı atlatma, path traversal vb.) gerçekleştirin ve düzenli olarak gözden geçirin.

UploadF örneğiyle değerlendirme

Burada tanıttığımız UploadF (uploadf.com), PC/akıllı telefon her ikisiyle de uyumlu, sürükleyip bırakma, 100 dosya eşzamanlı yükleme gibi kullanışlılık yönünden güçlü olmasının yanı sıra, hizmet tasarımında aşağıdaki gibi dikkat edilmesi gereken noktalar ve yenilikler de vardır.

Uygulama kontrol listesi (güvenlik tasarım açısı)

Kontrol maddesi Uygulama / kontrol noktaları
Uzantı beyaz liste sınırlaması Gerekli formatları yalnızca izin verin. Kara liste destekleyici olarak kullanılmalıdır.
MIME/İmza kontrolü Uzantı ve içeriğin eşleşip eşleşmediğini doğrulayın (büyülü sayı kontrolü).
Dosya adını yeniden adlandırma UUID ve hash adı ile değiştirin, orijinal adı meta veride yönetin.
Özel karakter temizleme `/`, `\`, `..`, NULL vb. temizlenmeli veya reddedilmelidir.
Kayıt yeri dizini Ağ kökü dışına veya nesne depolamasına kaydedin.
klasör izinleri Yürütmeyi yasaklayın, en az okuma/yazma izni (en az ayrıcalık ilkesi).
Maksimum / minimum dosya boyutu Üst sınırları belirtin ve ZIP vb. açıldıktan sonra kontrol edin.
eşzamanlı yükleme kontrolü Eş zamanlı sayısını sınırlayın, oran kontrolü, zaman aşımı ayarları yapın.
Virüs taraması / CDR Yüklemeden hemen sonra tarama ve gerektiğinde zarar vermeyen işlemler.
İletişim şifrelemesi (HTTPS) TLS'i zorunlu hale getirin (orta saldırıları önlemek için).
CSRF önlemleri Token tabanlı kontroller uygulayın.
Yanıt başlık ayarları Content-Disposition: attachment, X-Content-Type-Options: nosniff gibi ilave edin.
Loglama ve uyarı Yükleme işlemlerini denetleyin ve anormal durumu bildirin.
Düzenli güvenlik gözden geçirmesi Güvenlik testleri ve penetrasyonları düzenli olarak gerçekleştirin.
Eski dosyaların otomatik silinmesi Tutma süresi dolduktan sonra tam olarak silme tasarımı.
Erişim kontrolü/yetkilendirme Kullanıcı bazında/grup bazında erişim haklarını katı bir şekilde yönetin.

Özet ve kullanıcı odaklı bakış

Dosya yükleme işlevi hem kullanım kolaylığı hem de risk taşır. Metinde belirtilen çok katmanlı savunmaları (beyaz liste, imza kontrolü, kayıt yerinin ayrımı, zararlı yazılım önlemleri, log denetimi vb.) tasarımınıza entegre etmek, saldırı riskini büyük ölçüde azaltır.

Kullanıcılara "kolay kullanılabilir ve aynı zamanda güvenli" bir ifade hissettirmek önemlidir. Örneğin, UploadF (uploadf.com) gibi bireysel silme veya saklama süresi ayarlama gibi kullanıcıların yönetebileceği özelliklere sahip hizmetler güven duygusu sağlar.

Kaynaklar

  1. OWASP — Dosya Yükleme İhtiyat Listesi
  2. OPSWAT — Dosya yükleme koruma / en iyi uygulamalar
  3. PortSwigger — Dosya yükleme güvenlik açıkları
  4. SANS Institute — Güvenli dosya yükleme kılavuzu
  5. UploadF (uploadf.com) — Dosya Yükleyici (tanıtım sitesi)

※ Yukarıdaki bilgiler, makaleyi yazarken referans alınan örneklerdir. Daha detaylı uygulama belgeleri ve güncel tehdit bilgileri için resmi belgeleri kontrol ediniz.


Ana sayfa   Yardım   İletişim   🌐Language  
©Dosya yükleyici