PHP ile Dosya Yükleme Güvenliği
Php Php Hafta 5

PHP ile Dosya Yükleme Güvenliği

2 yıl önce · Aykut AKMAN · ~5 dk okuma · 1,2 B görüntüleme

Web uygulamaları, kullanıcıların resim, video, belge gibi dosyaları sunucuya yüklemesini ve bu dosyalara erişmesini sağlayarak daha etkileşimli deneyimler sunar. Ancak, dosya yükleme işlemi, web uygulamaları için güvenlik riskleri doğurabilir. Kötü niyetli kullanıcılar, zararlı dosyaları sunucuya yükleyerek, hizmet reddi (DoS) saldırıları gerçekleştirebilir veya kötü amaçlı yazılımları dağıtabilir. Bu nedenle, PHP ile dosya yükleme güvenliğini sağlamak önemlidir. Bu makalede, PHP'de dosya yükleme işlemi için nasıl güvenlik tedbirleri alınacağını öğreneceksiniz.

  1. Dosya Türü Kontrolü

Dosya yükleme formu oluştururken, sadece kabul edilebilir dosya türlerine izin vermelisiniz. Kullanıcılardan yalnızca belirli dosya uzantılarıyla dosya yüklemelerine izin vermek, zararlı dosyaların sunucuya gönderilmesini engelleyebilir.

<?php
   $izin_verilen_turler = array('jpg', 'png', 'gif');

   $dosya_uzantisi = pathinfo($_FILES['dosya']['name'], PATHINFO_EXTENSION);

   if (!in_array($dosya_uzantisi, $izin_verilen_turler)) {

      die("Geçersiz dosya türü! Sadece JPG, PNG ve GIF dosyaları yüklenebilir.");

   }
?>

  1. Dosya Boyutu Kontrolü

Yüklenen dosya boyutunun sınırlı olması, sunucunun kaynaklarının kötü niyetli kullanıcılar tarafından tükenmesini önleyebilir. Ayrıca, kullanıcıların uzun süre beklemesini engelleyerek daha iyi bir deneyim sunabilirsiniz.

<?php
   $maksimum_boyut = 5 * 1024 * 1024; // 5 MB

   if ($_FILES['dosya']['size'] > $maksimum_boyut) {

      die("Dosya boyutu çok büyük! Maksimum 5 MB dosya yüklenebilir.");

   }

?>

  1. Dosya Adı Güvenliği

Kullanıcıların yüklediği dosya adları güvenli olmalıdır. Zararlı karakterler içeren dosya adları sunucu güvenliğini tehlikeye atabilir. Dosya adlarını temizlemek ve istenmeyen karakterleri kaldırmak için aşağıdaki gibi bir işlev kullanabilirsiniz.

<?php
   function guvenli_dosya_adı($dosya_adı) {

      $gecersiz_karakterler = array("\\", "/", ":", "*", "?", "\"", "<", "-->", "|");

      return str_replace($gecersiz_karakterler, "", $dosya_adı);

   }

   $yuklenecek_dosya_adı = guvenli_dosya_adı($_FILES['dosya']['name']);

?>

  1. Sunucu Yolu Güvenliği

Yüklenen dosyaların sunucuda saklandığı yolun güvenli olduğundan emin olun. Dosyaların doğrudan erişilemeyeceği bir klasör oluşturarak, dosya yolu güvenliğini artırabilirsiniz.

<?php
   $hedef_klasor = "uploads/"; // Yüklenen dosyaların saklanacağı klasör

   $tam_yol = $hedef_klasor . $yuklenecek_dosya_adı;

   if (move_uploaded_file($_FILES['dosya']['tmp_name'], $tam_yol)) {

      echo "Dosya başarıyla yüklendi.";

   } else {

      echo "Dosya yüklenirken bir hata oluştu.";

   }

?>

  1. DoS Saldırılarından Korunma

Dosya yükleme sırasında DoS saldırılarından korunmak için, büyük dosyaların sürekli olarak yüklenmesini önlemek için uygun sınırlamaları belirleyebilirsiniz. Örneğin, belirli bir süre içinde aynı IP adresinden yapılan yükleme sayısını sınırlandırabilirsiniz.

  1. İstek Sayısını Sınırlama:

Bir IP adresinden belirli bir süre içinde yapılan istek sayısını sınırlayarak DoS saldırılarından korunabilirsiniz. Aşağıdaki örnek kod, 1 dakika içinde bir IP adresinden en fazla 10 isteğe izin verir.

<?php
   $limit = 10; // İzin verilen istek limiti

   $ip_adresi = $_SERVER['REMOTE_ADDR'];

   $zaman_araligi = 60; // 60 saniye (1 dakika)

   $dosya = 'dosya.txt'; // IP ve zaman bilgilerinin tutulacağı dosya

   $bilgiler = file($dosya, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

   // Belirtilen süre içindeki istekleri sayma

   $istek_sayisi = 0;

   foreach ($bilgiler as $bilgi) {

      list($ip, $zaman) = explode('|', $bilgi);

      if ($ip == $ip_adresi && time() - $zaman <= $zaman_araligi) {

         $istek_sayisi++;

      }
   }

   // Dosyaya IP ve zaman bilgilerini ekleme

   file_put_contents($dosya, "$ip_adresi|" . time() . "\n", FILE_APPEND);

   if ($istek_sayisi > $limit) {

      die("Çok fazla istek yapıldı. Lütfen bir süre sonra tekrar deneyin.");

   }

?>

  1. DoS Saldırıları için Zamanlama Kontrolü:

DoS saldırıları genellikle hızlı ardışık isteklerle gerçekleştirilir. Bu durumu kontrol edebilmek için, ardışık istekler arasında belirli bir gecikme olup olmadığını kontrol edebilirsiniz.

<?php
   $gecikme_suresi = 1; // 1 saniye gecikme

   $son_istek = isset($_SESSION['son_istek']) ? $_SESSION['son_istek'] : 0;

   $su_an = time();

   if ($su_an - $son_istek < $gecikme_suresi) {

      die("Lütfen bir süre sonra tekrar deneyin.");

   }

   $_SESSION['son_istek'] = $su_an;

?>

Bu kod, iki ardışık istek arasında en az 1 saniyelik bir gecikme olmasını sağlar. session_start() öncesinde kullanarak oturumları kontrol edebilirsiniz.

Önemli Not: Yukarıdaki kod örnekleri, DoS saldırılarından korunma için temel bir seviyede önlemler içerir. Gerçek bir uygulamada daha gelişmiş koruma mekanizmaları ve sunucu yapılandırmaları gerekebilir. Daha karmaşık ve güvenilir koruma önlemleri için uygulamanızın ihtiyaçlarına uygun güvenlik önlemleri uygulamanız önemlidir.

Bu makalede, PHP ile dosya yükleme güvenliği için alınabilecek önemli tedbirleri inceledik. Dosya yükleme işlemi, web uygulamaları için önemli bir özellik olsa da, güvenlik açıkları potansiyel riskleri beraberinde getirebilir. Yukarıda verilen güvenlik önlemlerini uygulayarak, kullanıcıların güvenli ve güvenilir bir şekilde dosya yüklemesini sağlayabilir ve web uygulamanızın güvenliğini artırabilirsiniz.

Türkiye Yüzyılı Maarif Modeli Akıllı Tahta & Tablet Uyumlu

9. Sınıf İnteraktif Etkinlikleri ve Pekiştirme Oyunları

Bu ders konusu ve temaya ait eşleştirme oyunları, testler, gruplama ve kavram sıralama etkinliklerini sınıfta akıllı tahtada oynatabilir veya öğrencilerinize ödev olarak yönlendirebilirsiniz.

Etkinlikler Merkezini Keşfet
Bilişim Teknolojileri ve Yazılım

9. Sınıf 5. Hafta Ders Planları & Dokümanları

2026-2027 Maarif Modeli ve MEB Müfredatına Uygun

2026-2027 MEB Uyumlu
Bilişim Teknolojileri ve Yazılım
9. Sınıf 5. Hafta Günlük Ders Planı

Öğrenme çıktıları, süreç basamakları ve MEB Maarif Modeli ders akışı.

Bilişim Teknolojileri ve Yazılım
9. Sınıf 2026-2027 Yıllık Planı

2026-2027 MEB Maarif Modeline uygun 36 haftalık yıllık çerçeve planı ve ünite dağılımı.

Resmî Kurul Evrakı
2026-2027 Maarif Zümre Tutanağı

25 gündem, 16 karar, açık uçlu ortak sınav ve ters yüz öğrenme planlı eksiksiz Word şablonu.

Tüm 9. Sınıf doküman ve çalışma kağıtlarına göz atın
Önceki Ders Hafta 4
PHP Form İşlemleri ve Veri Doğrulama
Hafta 6 Sonraki Ders
PHP ile Dosya İşlemleri ve Veri Okuma Yazma

Yorumlar (0)

Bu içerik size yardımcı oldu mu?

Sorularınızı, önerilerinizi veya konuyla ilgili deneyimlerinizi aşağıda paylaşabilirsiniz.