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:
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.
İ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.
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.
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.
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.
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.
İ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.
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.
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.
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.
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. |
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.
※ Yukarıdaki bilgiler, makaleyi yazarken referans alınan örneklerdir. Daha detaylı uygulama belgeleri ve güncel tehdit bilgileri için resmi belgeleri kontrol ediniz.