"İdare Eder" Doğrulama Neden Güvenlik Kabusunuz Olabilir: Son Dosya Yükleme Açıklarından Çıkarılan Dersler

"İdare Eder" Doğrulama Neden Güvenlik Kabusunuz Olabilir: Son Dosya Yükleme Açıklarından Çıkarılan Dersler

Tem 11, 2026 web security file upload vulnerabilities validation best practices php security web hosting security application security developer security vulnerability disclosure

Aynı Hafta İçinde Patlayan Kalıp

Bir hafta içinde üç farklı hosting sağlayıcısı kritik güvenlik açıkları duyurdu. Üçü de yetkisiz dosya yükleme açıklarıydı ve hepsi aynı sebepten kaynaklanıyordu: doğrulama işini kısa yoldan halletmek.

Bu aslında yeni bir sorun değil. Sektörde yıllardır tekrar eden bir hata. Şirketlere milyonlarca dolara mal oluyor—temizleme masrafları, itibar kaybı, hukuki davalar.

Kısayol Doğrulaması Nedir?

Geliştiriciler dosya yükleme özelliği eklerken genellikle en kolay yolu seçiyor. Dosya uzantısı doğru görünüyorsa tamam, MIME tipi uygunsa tamam, boyut sınırları içindeyse tamam. Bu kontroller tek başlarına yanlış değil ama kesinlikle yetersiz.

Kısayol doğrulaması, minimum kontrolleri yapıp dosyanın güvenli olduğunu varsaymak. Kapınıza gelen paketin dışarıdan zararsız göründüğüne bakıp içini açmadan kabul etmek gibi bir şey.

İşte sorun: Saldırganlar bu yüzeysel kontrolleri atlatabilen dosyalar hazırlamakta çok başarılı hale geldi.

Yetkisiz Dosya Yükleme Açıklarının Yapısı

Geçen hafta bulunan açıklar benzer bir yapıdaydı:

  1. Eksik uzantı kontrolü: Çift uzantılı dosyalar (.php.jpg gibi) veya az bilinen çalıştırılabilir uzantılar (.phtml, .phar) yüklenebiliyordu

  2. İçerik kontrolü yok: Dosyanın gerçek içeriği hiç incelenmiyordu. Görsel gibi görünüp kod olarak çalışan polyglot dosyalar sisteme girebiliyordu

  3. Güvensiz depolama: Yüklenen dosyalar web'den erişilebilir dizinlerde, uygun erişim kontrolü olmadan saklanıyordu

  4. Çalıştırma engeli yok: Sunucu ayarları yüklenen içeriğin çalıştırılmasını düzgün şekilde engellemiyordu

Bu açıklar birleşince, kimlik doğrulaması olmayan bir saldırgan istediği kodu yükleyip çalıştırabiliyordu—sunucu tamamen kontrol altına giriyordu.

Neden Hâlâ Aynı Hata Yapılıyor?

Bu kısayolların neden devam ettiğini anlamak, gelecekte önlemek için kritik.

Zaman baskısı: Üretim ortamları hızlı deployment istiyor. Tam doğrulama, "test ortamında uzantı kontrolü çalışıyor" denilince gereksiz görülebilir.

Yanlış güven: Test ortamları genellikle temiz dosyalarla çalışıyor. Doğrulayıcılar geçiyor, kod canlı ortamda patlıyor.

Tehdit farkındalığı eksikliği: Her geliştirici güvenlik geçmişine sahip değil. Saldırganların dosya yüklemelerini ne kadar yaratıcı şekilde manipüle edebileceğini bilmiyorlar.

Başka yerde koruma var sanısı: Ekipler bazen güvenlik kontrollerinin yığındaki başka yerlerde olduğunu varsayıyor—WAF, sunucu sertleştirme vb. Bu tehlikeli bir iyimserlik.

Sağlam Dosya Yükleme Güvenliği Nasıl Kurulur

Düzgün dosya doğrulaması, savunmanın derinliğine dayalı bir yaklaşım gerektiriyor. İşte doğru yolu:

1. Uzantı Değil, İçerik Üzerinden Dosya Türünü Doğrula

# Kötü yaklaşım - kullanıcı girdisine güveniyor
if file.filename.endswith('.jpg'):
    save_file(file)

# Daha iyi yaklaşım - gerçek içeriği doğruluyor
import magic

mime_type = magic.from_buffer(file.read(1024), mime=True)
file.seek(0)

if mime_type in ALLOWED_MIME_TYPES:
    save_file(file)

Sadece dosya adı veya beyan edilen MIME tipine değil, gerçek dosya içeriğini analiz etmek için python-magic veya libmagic gibi kütüphaneler kullan.

2. Dosya Adını Yeniden Oluştur ve Temizle

Yüklenen dosyanın orijinal adını asla doğrudan kullanma. Tamamen yeni bir dosya adı oluştur:

import uuid
import os

# Tüm uzantıları kaldır, güvenli dosya adı oluştur
secure_filename = f"{uuid.uuid4().hex}.{allowed_extension}"
filepath = os.path.join(UPLOAD_DIR, secure_filename)

3. Dosyaları Web Root'in Dışında Sakla

Hassas uygulamalar için bu vazgeçilmez. Dosyalara erişim gerekiyorsa, yetkilendirmeyi kontrol eden ve gerçek dosya yolunu göstermeyen bir indirme betiği üzerinden servis et.

4. Sunucuyu Çalıştırmayı Engelleyecek Şekilde Yapılandır

Web sunucusu yapılandırmanda:

# Apache - uploads dizininde script çalıştırmayı engelle
<Directory "/var/www/uploads">
    <FilesMatch "\.(php|phtml|phar|py|pl|exe)$">
        Order Deny,Allow
        Deny from all
    </FilesMatch>
</Directory>

5. Ek Doğrulama Katmanları Ekle

  • Dosya imzası doğrulama: Dosyaların başındaki magic byteları kontrol et
  • Görsel temizleme: Görselleri imagemagick gibi güvenli bir kütüphane üzerinden yeniden kodla, gömülü kodu temizle
  • Boyut sınırları: Hem dosya boyutu hem de görseller için boyut sınırı koy
  • Oran sınırlama: Saldırganların ardı ardına dosya yüklemesini engelle

Doğrulama Kısayollarının İnsani Maliyeti

Teknik sonuçların ötesinde, bu açıklar gerçek insanları etkiliyor:

  • Müşteriler verileri tehlikeye giren
  • İşletmeler düzenleyici para cezaları ve davalarla karşılaşan
  • Geliştiriciler önlenebilir hatalardan kariyerleri etkilenen
  • Son kullanıcılar onlara güvendikleri hizmetlerin başarısız olduğunu gören

Güvenlik bir özellik değil, bir sorumluluk.

Hosting Sağlayıcıları Şimdi Ne Yapmalı?

Hosting platformu işletiyorsan veya dosya yükleme özelliği geliştiriyorsan:

  1. Mevcut kodu denetle — kısayol doğrulamaları var mı kontrol et
  2. Düzgün içerik türü doğrulaması uygula
  3. Yüklenen dosyaları web'den erişilebilir dizinlerin dışına taşı
  4. Ek katman olarak WAF kuralları ekle
  5. Açık bulunduğunda ne yapacağını planla
  6. Geliştirme ekiplerine güvenlik eğitimi ver

Sonuç

Geçen hafta bulunan açıklar sofistike saldırılardan veya bilinmeyen açıklardan kaynaklanmadı—geliştirme sırasında alınan kısayollardan kaynaklandı. Bu aslında umut verici: düzeltmeler ulaşılabilir mesafede.

Güvenlik yavaş veya acıtıcı olmak zorunda değil. "idare eder" doğrulamasından kapsamlı, savunma derinliğine dayalı yaklaşımlara geçmeyi gerektiriyor. Mesele şu: uygulamanın test edilip edilmeyeceği değil—test edildiğinde geçip geçmeyeceği.

Doğrulamayı düzgün yapmak için zaman ayır. Kullanıcıların buna güveniyor.

Read in other languages:

RU BG EL CS UZ SV FI RO PT PL NB NL HU IT FR ES DE DA ZH-HANS EN