Konuyu Açan #1
Bir dosyanın meta verilerini işlerken SQL güvenliğini düşünmek genelde gözden kaçan bir konu olabilir. Özellikle PHP ile dosya yüklemeleri veya dizin taramaları yaparken, dosya üzerinde saklanan bilgiler üzerinden veritabanına güvenli şekilde erişim sağlamak kritik hale geliyor. Aşağıda yalnızca genel prensipleri ve uygulama yaklaşımını paylaşmak istiyorum; spesifik projeye göre gereksinimler değişebilir.

[ul]
  • Girdi doğrulaması ve temizleme: Dosya ile ilgili gelen tüm parametreler (isim, boyut, mime tipi, yükleme kaynağı vb.) üzerinde katı doğrulama yapın. Örneğin, kullanıcıdan gelen dosya adı bir yol içeriyorsa herhangi bir dizin traversal girişimine açık olup olmadığını kontrol edin ve özel karakterleri temizleyin.
  • Hazır ifadeler ve parametreli sorgular: SQL enjeksiyonuna karşı en güvenli yol, tüm kullanıcı girdilerini parametrik sorgularla kullanmaktır. PDO ile hazırlanan ifadeleri (prepared statements) tercih edin ve veritabanı katmanında sütunları doğrulayın.
  • Sınırlı yetkilerle veritabanı kullanımı: Dosya meta verilerini işleyecek işlemler için veritabanı kullanıcı hesabını yalnızca gerekli izinlerle sınırlandırın. SELECT, INSERT gibi işlemler için ayrı hesap kullanılması, gerektiğinde rollback ve izleme için faydalıdır.
  • Dosya meta verisini saklama stratejisi: Dosya adları, MIME tipleri veya diğer meta bilgileri doğrudan SQL yerine, mümkünse izinli bir enum/lookup tablosu veya JSON sütunları içinde güvenli bir şekilde saklayın. Kullanıcı girdisini saklarken kodlamayı ve karakter setini tutarlı şekilde uygulayın.
  • JSON ve dizi verilerinde güvenlik: Eğer meta verileri JSON olarak saklanıyorsa, json_encode/json_decode kullanırken hata kontrollerine ve güvenli dizin dönüşümlerine dikkat edin. Bellek ve zaman aşımı farkındalığına sahip olun.
  • Loglama ve izleme: Dosya meta verisiyle ilgili SQL işlemlerini yeterli düzeyde loglayın. Hangi kullanıcı/oturumun hangi sorguyu tetiklediğini kaydetmek, şüpheli davranışları tespit etmek için faydalıdır.
  • Güvenlik testleri: Enjekte edilmesi muhtemel alanlar için basit testler ve kod incelemeleri yapın. Özellikle dosya adı içeriğiyle kurulan dinamik sorgular varsa, bu noktada ekstra dikkat edin.
    [/ul]

    Örnek senaryo (basitleştirilmiş akış):
    • Dosya yüklemesi sırasında, kullanıcıdan gelen dosya adı ve açıklama gibi alanlar alınıyor.
    • Bu alanlar PDO ile hazırlanan bir INSERT ifadesine güvenli şekilde bağlıyor:

    KOD
    12345678
    $stmt = $db->prepare("INSERT INTO file_metadata (filename, mime_type, size, description) VALUES (:fn, :mt, :sz, :desc)");
    $stmt->execute([
      ':fn' => $safeName,
      ':mt' => $mimeType,
      ':sz' => $size,
      ':desc' => $description
    ]);
    

    • Dosya saklama yolunu diskte sabit bir yere koyun ve yalnızca gerçek dosya adıyla eşleşen bir referans tabloya kaydedin. Böylece path traversal riskleri minimizes olur.


    Siz bu tür senaryolarda hangi güvenlik tedbirlerini önceliklendiriyorsunuz? Özellikle meta veriyi saklarken hangi yapısal kararlar ve yoklama adımlarını uyguluyorsunuz? Tecrübelerinizi ve karşılaştığınız zorlukları paylaşabilir misiniz?
  • Yanıt vermek için giriş yapmış olmalısınız.

    Bu konuyu görüntüleyen kullanıcılar (Toplam: 2, Üyeler: 2, Misafirler: 0)
    Toplam: 2 (üyeler: 2, misafirler: 0)
    0 alıntı seçildi