Konuyu Açan #1
[blockquote]Bu konuyu daha güvenli bir şekilde tartışabilmek için, öncelikle LOCAL INFILE nedir ve neden güvenlik açısından riskli olarak görülüyor, ardından karşılaşılan tipik tehdit senaryoları ve önleyici uygulamaları ele alalım. Ayrıca hangi durumlarda LOCAL INFILE kullanmamak gerektiğini ve alternatif yaklaşımları tartışalım.[/blockquote]

Giriş ve temel riskler
LOCAL INFILE komutu, istemciden sunucuya veri yüklemek için kullanılır. MariaDB'de bu komutun sunucu tarafında bazı güvenlik sorunlarına yol açabilmesi şu başlıklar altında toplanabilir:
  • Yetki sızması: Bir kullanıcıya gereğinden fazla yetki verilirse, CONTROLLED olmayan dosyaları sunucuya veya istemciye çekme/yükleme imkanı doğabilir. Özellikle FILE yetkisinin yanlış yapılandırılması risk doğurur.
  • Yol enjeksiyonu ve dışa açık dosyalar: Dosya adları ve yolları düzgün filtrelenmezse, kullanıcılar sunucunun erişim izin verilen dizinleri dışına çıkabilir veya hassas dosyaları işaretleyerek yanlış yere yazabilir.
  • Dosya biçimi bozulması ve istismar: Yüklenecek dosyada beklenmeyen formatlar veya zararlı içerikler, sunucu tarafında hatalara veya kötüye kullanıma yol açabilir. Özellikle CSV veya TSV gibi yapısal formatlarla gelen veriler yanlış ayrıştırıldığında, istemci tarafında sızıntılar veya kaynak tüketimi tetiklenebilir.
  • Denetim ve kayıt eksikliği: Local infile etkin olduğunda hangi kullanıcı hangi dosyayı yüklediği yeterince izlenmiyorsa, güvenlik olaylarını tespit etmek zorlaşır.


Kontrollü kullanım için uygulanabilir önlemler
  • Minimize yetki: FILE yetkisinin yalnızca gerçekten gerekli olduğu durumlarda verilmesi ve mümkünse RO (read-only) veya sınırlı bir konfigürasyonla kullanılması.
  • Yükleme kaynağını sınırlama: Yerel dosya sistemine erişimi sadece belirli dizinlerle sınırlamak; güvenlik duvarı veya IAM benzeri kontrol katmanlarıyla gelen veriyi kısıtlamak.
  • Dosya doğrulama ve temizleme: Yüklenecek dosyaların biçimini önceden doğrulamak, içerikleri için boyut, satır sayısı, kaçının boş satır olduğu gibi kontroller yapmak. Zararlı içerik için basit filtreler uygulamak.
  • ENCRYPTION ve TLS: Ağ üzerinden iletim sırasında verilerin korunması ve yetkisiz dinlenmenin önüne geçilmesi için TLS kullanımı.
  • Denetim ve loglama: Kim, hangi dosyayı, ne zaman yükledi, hangi tabloya/kolona yönlendirildi gibi bilgiler için merkezi loglama ve periyodik inceleme süreçleri oluşturmak.


Alternatif güvenli yaklaşımlar ve pratik tavsiyeler
  • LOCAL yerine LOAD DATA INFILE'in güvenli konfigürasyonu: Sunucu tarafında güvenli bir şekilde çalışacak şekilde sadece güvenli veri kaynaklarını kabul etme ve sertifikalı istemciyle entegre etme.
  • Uygun yükleme yöntemleri: Özellikle dışa açık veritabanı sunucularında dosya yükleme için API tabanlı çözümler veya aracı servisler kullanmak; doğrudan SQL komutları yerine kontrollü arayüzler üzerinden yükleme sağlamak.
  • Uygulama katmanında doğrulama: Verinin geldiği uçtan uçta, uygulama katmanında da doğrulama, temizleme ve sınırlı işlem akışları kurmak.
  • Güncel güvenlik politikaları: MariaDB sürümünüzün güvenlik yamalarını takip etmek, konfigürasyon kılavuzlarındaki güvenli ayarları uygulamak.


Kapanış ve soru
LOCAL INFILE kullanımı belirli iş akışlarında pratik olabilir, fakat güvenlik tarifi çok katmanlıdır. Sizin kurulunuzda bu özelliği hangi senaryolarda kullanıyorsunuz, hangi riskleri gördünüz ve hangi önlemleri uyguluyorsunuz? Deneyimlerinizi ve önerilerinizi paylaşabilir misiniz?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi