Dosya uzantısına göre MIME type öğrenmek
C#, JavaScript ve Python ile dosya uzantısından MIME type tahmin etmek için kullanılabilecek örnekler ve güvenlik açısından dikkat edilmesi gerekenler.
Dosya yükleme alan her uygulamanın çözmesi gereken bir sorun var: gelen dosyanın türünü belirlemek. Tarayıcının bildirdiği türe güvenilmez (kullanıcı değiştirebilir), o yüzden tür genellikle uzantıdan çözülür. Aşağıda C# ve JavaScript karşılıkları var.
C# tarafında bunun için ayrı bir kütüphaneye gerek yok: ASP.NET Core ile gelen sağlayıcı, yüzlerce uzantı–MIME eşleşmesini hazır getirir. Bilinmeyen bir uzantıda null döner, yani dönen değeri kontrol etmelisiniz. JavaScript tarafında ise küçük bir paket aynı işi görür.
Güvenlik notu: MIME türü bir iddiadır, kanıt değil. Yüklenen dosyanın gerçekten iddia ettiği tür olduğundan emin olmanız gerekiyorsa dosyanın ilk baytlarına (imza/sihirli sayı) bakmalı ya da içeriğini işleyerek doğrulamalısınız.
C#
public string? GetMimeType(string fileExtension)
{
FileExtensionContentTypeProvider provider = new();
return !provider.TryGetContentType(fileExtension, out string? mimeType) ? null : mimeType;
}
Javascript
Öncelikle aşağıdaki komutu kullanarak gerekli kütüphaneyi kurmamız gerekmektedir.
npm install mime
const mime = require('mime');
function getMimeType(fileExtension)
{
const mimeType = mime.getType(fileExtension);
return mimeType || null;
}
Python
from mimetypes import MimeTypes
def get_mime_type(file_extension):
mime_types = MimeTypes()
mime_type, _ = mime_types.guess_type(f"dummy.{file_extension}")
return mime_type
Kısa rehber
Ne zaman kullanılır?
MIME type kontrolü; dosya yükleme, belge arşivi, resim galerisi ve API ile dosya taşıma işlemlerinde gerekir. Kullanıcı dosyayı seçtiğinde sistemin neyle karşılaştığını doğru anlaması güvenlik için önemlidir.
Dikkat edilecekler
- Sadece dosya uzantısına güvenmeyin; mümkünse içeriği de kontrol edin.
- İzin verilen türleri beyaz listeyle sınırlayın.
- Yüklenen dosyayı doğrudan çalıştırılabilir bir alanda tutmayın.
Sık yapılan hata
Dosyanın adında .jpg yazıyor diye onun gerçekten güvenli bir görsel olduğunu varsaymak tehlikelidir. Dosya yükleme ekranlarında doğrulama birkaç katmanlı olmalıdır.
Bu örnek nerede işe yarar?
Bu tür küçük yardımcı kodlar web yazılımı, mobil uygulama arka uçları, yönetim panelleri ve API projelerinde zaman kazandırır. Önemli olan örneği olduğu gibi kopyalamak değil, veri formatı, güvenlik ve performans beklentisine göre projeye uyarlamaktır.