İçeriğe atla
FerdiGidenby FerdiSoftBETA v2.4
Güvenlik

PHP ile Güvenli Dosya Yükleme: 8 Kontrol

PHP ile Güvenli Dosya Yükleme: 8 Kontrol, Güvenlik alanında sıkça karşılaşılan ve doğru uygulandığında fark yaratan konulardan biri. Bu yazı konuyu 6 temel noktada ele alıyor, çalışan bir PHP örneği üzerinden ilerliyor, sonunda da uygulamada nelere dikkat edilmesi gerektiğini özetliyor.

Ferdi GidenFerdi Giden 2 dk okuma 35
PHP ile Güvenli Dosya Yükleme: 8 Kontrol
İçindekiler
  1. Temel kavram ve amaç
  2. Kritik noktalar
  3. Örnek kod
  4. Neden önemli? Kazanımlar
  5. Özetle

PHP ile Güvenli Dosya Yükleme: 8 Kontrol, Güvenlik alanında sıkça karşılaşılan ve doğru uygulandığında fark yaratan konulardan biri. Bu yazı konuyu 6 temel noktada ele alıyor, çalışan bir PHP örneği üzerinden ilerliyor, sonunda da uygulamada nelere dikkat edilmesi gerektiğini özetliyor.

Temel kavram ve amaç

Dosya yükleme formu, sunucuya dışarıdan kod sokmanın en kısa yoludur. Yalnızca dosya uzantısına bakan bir kontrol, fotograf.jpg.php ya da içine PHP gömülmüş bir resimle kolayca aşılır. Aşağıdaki kontroller birlikte uygulandığında yükleme alanı saldırı yüzeyi olmaktan çıkar.

Kritik noktalar

  • MIME türünü içerikten okuyun: Tarayıcının gönderdiği tür bilgisine değil, finfo ile dosyanın kendisine bakın.
  • Yeni ad verin: Kullanıcının dosya adını kullanmayın; rastgele ad ve beyaz listeden gelen uzantı atayın.
  • Boyut sınırı: Hem php.ini (upload_max_filesize) hem de kodda boyut sınırı koyun.
  • Çalıştırmayı kapatın: Yükleme klasöründe PHP çalışmasını .htaccess ile engelleyin.
  • Görselleri yeniden işleyin: GD ya da Imagick ile yeniden kaydetmek dosyaya gömülü kodu temizler.
  • Klasörü web kökünün dışına alın: Mümkünse dosyaları bir PHP betiği üzerinden, yetki kontrolüyle sunun.

Örnek kod

Teoriyi somutlaştırmak için kısa bir PHP örneğine bakalım:

$izinli = ['image/jpeg' => 'jpg', 'image/png' => 'png', 'image/webp' => 'webp'];
$dosya = $_FILES['gorsel'] ?? null;
if (!$dosya || $dosya['error'] !== UPLOAD_ERR_OK) exit('Yükleme başarısız.');
if ($dosya['size'] > 5 * 1024 * 1024) exit('En fazla 5 MB.');

$tur = (new finfo(FILEINFO_MIME_TYPE))->file($dosya['tmp_name']);
if (!isset($izinli[$tur]) || !getimagesize($dosya['tmp_name'])) exit('Geçersiz görsel.');

$ad = bin2hex(random_bytes(16)) . '.' . $izinli[$tur];
move_uploaded_file($dosya['tmp_name'], __DIR__ . '/../yuklemeler/' . $ad);

Örneği kendi projenize uyarlarken değişken adlarını ve yapılandırma değerlerini ortamınıza göre değiştirmeyi unutmayın.

PHP 8 ile gelen match ifadesi ve isimli argümanlar, uzun switch ve parametre listelerini daha okunur hâle getirir.

Neden önemli? Kazanımlar

Bu yaklaşımı benimsediğinizde elde edeceğiniz başlıca faydalar:

  • Saldırı yüzeyini daraltır ve olası veri sızıntılarının önüne geçer
  • Güvenlik denetimlerinden daha kolay geçen bir kod tabanı sağlar
  • Hataların canlı ortama çıkmadan fark edilmesine yardım eder
  • Kullanıcı güvenini ve marka itibarını korur

Özetle

PHP ile Güvenli Dosya Yükleme: 8 Kontrol konusunda ele aldığımız 6 nokta, günlük çalışmada en sık ihtiyaç duyulan kısmı kapsıyor. Özellikle MIME türünü içerikten okuyun ve Klasörü web kökünün dışına alın başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.

İlgili içerikler:

Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.

Paylaş:
Ferdi Giden

Yazar

Ferdi Giden @admin
Sistem YöneticisiDoğrulanmış GeliştiriciBeta KullanıcıFerdiSoft KatılımcısıDoğrulanmış ProfilGüvenlik Bilinci

PHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.

Yorumlar 0

Yorum yapmak ve tartışmaya katılmak için giriş yapın. Rozetleriniz yorumlarınızda görünür.

Henüz yorum yok. İlk yorumu siz yazın!

Ücretsiz Teklif Al