Dosya türü kontrolü istemcinin gönderdiği Content-Type'a mı, dosyanın içeriğine mi bakar?
Kısa cevap
Dosyanın içeriğine bakar. Multipart parçasının Content-Type başlığı okunur ama Allowed Upload Mime Types denetiminde kullanılmaz; tür, dosyanın ilk baytlarındaki imzalardan (PDF, görseller, arşivler, Office belgeleri) tespit edilir. Bilinen imza yoksa ve içerikte ikili kontrol karakterleri varsa tür application/octet-stream olur; metin içerikte HTML, XML, SVG, PHP ve betik başlıkları aranır; tür yine çıkmazsa dosya adı uzantısına bakılır, uzantı tanınmıyorsa text/plain döner. Uzantı ayrıca ZIP ve eski Office tabanlı belgelerin türünü ayırmakta kullanılır. Bu nedenle Content-Type'ı image/png yapılarak PHP betiği yüklenemez; .txt uzantılı ama <?php içeren dosya application/x-httpd-php olarak tespit edilir. Raw gövdelerde aynı tespit dosya adı olmadan yapılır (Allowed Raw Body Mime Types).
Nasıl Çalışır?
| # | Adım | Sonuç örneği |
|---|---|---|
| 1 | Dosyanın ilk baytlarındaki imzalar | application/pdf, image/png, image/jpeg, application/zip; ZIP ve eski Office biçimlerinde uzantıyla ayrım (ör. .docx → application/msword, .xlsx → application/vnd.ms-excel) |
| 2 | İmza yok, içerikte ikili kontrol karakteri var | application/octet-stream |
| 3 | Metin içerikte başlık arama | text/html, application/xml, image/svg+xml, application/x-httpd-php, text/x-shellscript |
| 4 | Dosya adı uzantısı | Uzantının bilinen türü (ör. .txt → text/plain) |
| 5 | Hiçbiri | text/plain |
- Tespit edilen tür, ihlal kaydının Description alanında görülür; izin listesi bu adla yazılır (Dosya yüklemede yalnızca belirli MIME tiplerine izin verebilir miyim?).
- Multipart parçasında
filenameveContent-Typebaşlıklarından yalnızca biri varsa ya da dosya adı boşsa (filename="", tarayıcının boş bıraktığı dosya alanı) veya tırnak içinde değilse gövde çözümlenemez; bu durumda Block Invalid Form Contents ayarı devreye girer (Bozuk (parse edilemeyen) JSON / XML / form gövdelerini engelleyebilir miyim?). - Görsel imzasıyla başlayan bir dosya içinde başka içerik taşısa da görsel türü olarak tespit edilir; dosya içeriğinin saldırı desenleri için taranması OWASP Check in Upload ile yapılır (Yüklenen dosyaların içeriği de taranıyor mu (OWASP Check in Upload)?).
Sık Karıştırılan Noktalar
- "
Content-Type'ı değiştirmek tür denetimini geçer." İstemcinin bildirdiği tür denetimde kullanılmaz; tür içerikten tespit edilir. - "Uzantı hiç dikkate alınmaz." Uzantı, içerikten tür çıkmayan metinlerde son adımda ve ZIP ile eski Office tabanlı belgelerin ayrımında kullanılır.
- "Tespit edilen ad her zaman resmi MIME adıdır." Bazı belgeler genel bir adla tespit edilir (ör.
.docx→application/msword); liste, kayıtta görülen tespit edilen adla tamamlanır.
Dokümantasyonda nasıl yapılır
