30 Nisan 2025 - 10:51
PHP ile Dosya Yükleme ve Güvenlik Önlemleri Görseli
PHP

PHP ile Dosya Yükleme ve Güvenlik Önlemleri

Yorumlar
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.

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='.pdf'> //Sadece .pdf uzantılı dosyalar seçilebilir.
<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.';
    }
}
Bu kod, dosyayı 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’nin php.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

Yorumlar ()

Henüz yorum yok. İlk yorum yapan sen ol!

Yorum Yap