PHP
Dosya türü doğrulama
Yüklenen dosyanın türünü (MIME) doğrulamayı öğrenirsin.
MIME türü nedir?
Yüklenen dosyanın türünü denetlemeden kabul etmek tehlikelidir; biri .jpg adlı bir PHP betiği gönderebilir. Bu yüzden dosya türünü doğrulamalısın.
MIME türü, dosyanın içeriğini tanımlayan bir etikettir (örneğin image/png, application/pdf). PHP bu bilgiyi $_FILES['avatar']['type'] alanında tutar; tarayıcı tarafından bildirilir.
Tarayıcının söylediği MIME türü her zaman doğru değildir; daha güvenli olmak için mime_content_type() veya finfo ile gerçek türü okuyabilirsin. Ama başlangıçta type alanı yeterlidir.
İzin verilen türler listesi
Doğrulama için izin verilen MIME türlerini bir dizi olarak tanımlarsın: $allowed = ['image/png', 'image/jpeg']. Sonra in_array() ile dosyanın türünün listede olup olmadığını kontrol edersin.
Örnek: in_array($file['type'], $allowed, true). Üçüncü parametre true sıkı karşılaştırma (strict) yapar; tür dönüştürme olmadan karşılaştırır. Güvenlik açısından bu önemlidir.
Yalnızca uzantıya bakmak yeterli değildir; çünkü uzantı kolayca değiştirilebilir. MIME türü daha güvenilir bir kontrol sunar.
Uygulama validateType fonksiyonu
Bir validateType(array $file, array $allowed): string fonksiyonu yaz. İçinde in_array($file['type'], $allowed, true) ile türü kontrol et. Eşleşirse return 'Geçerli: ' . $file['type'], değilse return 'Reddedildi: ' . $file['type'] döndür. Test için $_FILES['avatar'] tanımla (name: 'profil.png', type: 'image/png', tmp_name: '/tmp/phpAbCd.tmp', error: 0, size: 102400), $allowed = ['image/png', 'image/jpeg'] tanımla ve echo validateType($_FILES['avatar'], $allowed) . "\n" yaz.
Örnek çözümü göster
', değilse 'Reddedildi: ' + type döndür.
Örnek çözüm:
<?php
// Dosya türü doğrulama
function validateType(array $file, array $allowed): string {
if (in_array($file['type'], $allowed, true)) {
return "Geçerli: " . $file['type'];
}
return "Reddedildi: " . $file['type'];
}
$_FILES['avatar'] = [
'name' => 'profil.png',
'type' => 'image/png',
'tmp_name' => '/tmp/phpAbCd.tmp',
'error' => 0,
'size' => 102400
];
$allowed = ['image/png', 'image/jpeg'];
echo validateType($_FILES['avatar'], $allowed) . "\n";
Kendini test et
-
Dosya türü için hangi kontrol daha güvenilir?
- MIME türünü kontrol etmek
- Dosya uzantısını kontrol etmek
- Sadece dosya adına bakmak
- Kontrol yapmadan kabul etmek
Cevabı göster
MIME türünü kontrol etmek — Doğru. MIME türü uzantıdan daha güvenilirdir.
-
Uzantıları ve MIME türlerini eşleştir
- .png
- image/png
- .jpg
- image/jpeg
- .gif
- image/gif
- .pdf
- application/pdf
-
in_array ile tür kontrolü
if (in_array($file['type'], ____, true)) { return true; }
Cevabı göster
if (in_array($file['type'], $allowed, true)) { return true; }
Sıradaki ders: Dosya boyutu sınırı