
Web uygulamalarında dosya yükleme işlemi, kullanıcıların belge, resim veya diğer medya dosyalarını sisteme yüklemelerini sağlamak için sıkça kullanılan bir özelliktir. Ancak, güvenlik açıklarına karşı dikkatli olmak gerekir. Kötü niyetli kişiler, zararlı dosyaları yükleyerek sistemlere zarar verebilir.
Bu yazıda, PHP ile güvenli dosya yükleme yöntemlerini adım adım inceleyeceğim.
Bu kod, dosyayı
1. PHP ile Temel Dosya Yükleme İşlemi
PHP’de dosya yükleme işlemi için$_FILES
süper global değişkeni kullanılır.
1️⃣ HTML Form ile Dosya Yükleme
HTML
<form action='upload.php' method='post' enctype='multipart/form-data'>
<input type='file' name='dosya'>
<input type='submit' value='Yükle'>
</form>
- 📌 Önemli:
enctype='multipart/form-data'
eklenmezse dosya yükleme çalışmaz.
<input type='file' name='dosya'>
kısmına accept ekleyebiliriz ve bu da daha tarayıcıdan hatalı dosya yüklenmesini önler. Birkaç örnek vereyim;
<input type='file' accept='.jpg, .jpeg, .png, .gif'> //Kullanıcı sadece
.jpg
, .jpeg
, .png
veya .gif
yükleyebilir.<input type='file' accept='image/*'> //Tüm resim dosyalarını (
.jpg
, .png
, .gif
, .svg
, vb.) kabul eder.<input type='file' accept='audio/*'> //Bu,
.mp3
, .wav
, .ogg
, vb. tüm ses dosyalarını kabul eder.<input type='file' accept='.pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx'> //Kullanıcı sadece belirtilen belge türlerini yükleyebilir.
2️⃣ PHP ile Dosyayı Alma ve Kaydetme
PHP
if ($_FILES['dosya']['error'] == 0) {
$hedef_klasor = 'uploads/';
$hedef_dosya = $hedef_klasor . basename($_FILES['dosya']['name']);
if (move_uploaded_file($_FILES['dosya']['tmp_name'], $hedef_dosya)) {
echo 'Dosya başarıyla yüklendi: ' . $hedef_dosya;
} else {
echo 'Dosya yüklenirken hata oluştu.';
}
}
uploads/
klasörüne taşır. Ancak, güvenlik önlemleri alınmazsa zararlı dosya yüklenmesine sebep olabilir.
2. PHP ile Dosya Yükleme Güvenlik Önlemleri
Dosya yükleme işlemi sırasında dikkat edilmesi gereken güvenlik önlemleri:1️⃣ Dosya Türü Kontrolü (MIME Type Kontrolü)
Sadece belirli dosya türlerine izin vererek güvenliği artırabilirsiniz:
PHP
$izin_verilen_tipler = array('image/jpeg', 'image/png', 'image/gif');
$dosya_tipi = mime_content_type($_FILES['dosya']['tmp_name']);
if (!in_array($dosya_tipi, $izin_verilen_tipler)) {
die('Bu dosya türüne izin verilmiyor!');
}
- ✅ Sadece resim formatındaki dosyaları kabul eder.
2️⃣ Dosya İsmini Güvenli Hale Getirme
Dosya isimlerini rastgele atayarak, zararlı dosyaların çalıştırılmasını engelleyebilirsiniz:
PHP
$dosya_uzantisi = pathinfo($_FILES['dosya']['name'], PATHINFO_EXTENSION);
$yeni_dosya_adi = uniqid() . '.' . $dosya_uzantisi;
$hedef_dosya = 'uploads/' . $yeni_dosya_adi;
- ✅ Bu yöntem, orijinal dosya ismini güvenli hale getirir.
3️⃣ Yüklenen Dosyanın Boyutunu Sınırlandırma
Büyük boyutlu dosyaların yüklenmesini engellemek için:
PHP
$max_boyut = 2 * 1024 * 1024; // 2MB
if ($_FILES['dosya']['size'] > $max_boyut) {
die('Dosya boyutu çok büyük!');
}
- ✅ 2MB’den büyük dosyaların yüklenmesini engeller.
4️⃣ Sadece Belirli Klasöre Yükleme
Dosyaların yalnızca belirli bir klasöre yüklenmesini sağlamak için:
PHP
if (!is_uploaded_file($_FILES['dosya']['tmp_name'])) {
die('Geçersiz dosya yükleme işlemi!');
}
- ✅ Dosyanın doğrudan bir istemci tarafından yüklenip yüklenmediğini kontrol eder.
5️⃣ PHP Konfigurasyonu ile Güvenlik Önlemleri
PHP’ninphp.ini
dosyasında şu ayarları yaparak güvenliği artırabilirsiniz:
INI
file_uploads = On
upload_max_filesize = 2M
post_max_size = 3M
- ✅ Bu ayarlar, yükleme boyutunu sınırlandırır.
3. Örnek Proje: Resim Yükleme ve Görüntüleme
Şimdi tüm güvenlik önlemlerini içeren bir resim yükleme ve görüntüleme scripti oluşturalım.1️⃣ HTML Form
HTML
<form action='upload.php' method='post' enctype='multipart/form-data'>
<input type='file' name='dosya'>
<input type='submit' value='Yükle'>
</form>
2️⃣ Güvenli PHP Upload Scripti
PHP
if ($_FILES['dosya']['error'] == 0) {
$izin_verilen_tipler = array('image/jpeg', 'image/png', 'image/gif');
$dosya_tipi = mime_content_type($_FILES['dosya']['tmp_name']);
if (!in_array($dosya_tipi, $izin_verilen_tipler)) {
die('Bu dosya türüne izin verilmiyor!');
}
$dosya_uzantisi = pathinfo($_FILES['dosya']['name'], PATHINFO_EXTENSION);
$yeni_dosya_adi = uniqid() . '.' . $dosya_uzantisi;
$hedef_dosya = 'uploads/' . $yeni_dosya_adi;
if (move_uploaded_file($_FILES['dosya']['tmp_name'], $hedef_dosya)) {
echo 'Dosya başarıyla yüklendi: <img src='$hedef_dosya' width='200'>';
} else {
echo 'Dosya yüklenirken hata oluştu.';
}
}
- ✅ Bu script, yüklenen resmi göstererek güvenli bir yükleme işlemi yapar.
Benzer Yazılar

PHP ile Çok Katmanlı MVC Mimari Kullanımı
0 Yorumlar
Yorumlar ()
Henüz yorum yok. İlk yorum yapan sen ol!