Dosya Yüklemeleri Dosya Erişimine Dönüştüğünde
Tek bir güvensiz yükleme işleyicisi, tam yol geçişi saldırısına ve dosya yükleme güvenlik açığına yol açabilir. Geliştiriciler dosya adlarını doğrudan yükleme yollarıyla birleştirdiğinde, Saldırganlar kötü amaçlı dosya adları gönderebilirler. sevmek ../../etc/passwd Dizinlerden çıkmak ve hassas dosyalara erişmek için. Bu tür yol geçişi, özellikle uygulama yükseltilmiş izinlerle çalıştırıldığında, basit bir yükleme API'sini güçlü bir dosya erişim açığına dönüştürür.
⚠️Bu örnek güvenlik açısından yetersizdir, yalnızca eğitim amaçlıdır. Üretim ortamında kullanmayın.
// Vulnerable upload handler, file upload vulnerability [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var path = Path.Combine("uploads/", file.FileName); // No validation using var stream = new FileStream(path, FileMode.Create); await file.CopyToAsync(stream); return Ok("File uploaded!"); } Saldırgan, adlı bir dosyayı yükleyebilir. ../../web.config Kısıtlanmış dosyaların üzerine yazmak veya okumak, klasik bir yol geçişi saldırısıdır.
Güvenli sürüm:
// Safe upload with validation and canonicalization [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var fileName = Path.GetFileName(file.FileName); // strip directories var targetDir = Path.GetFullPath("uploads/"); var safePath = Path.Combine(targetDir, fileName); if (!safePath.StartsWith(targetDir)) return BadRequest("Invalid file path"); using var stream = new FileStream(safePath, FileMode.Create); await file.CopyToAsync(stream); return Ok("File securely uploaded!"); } Eğitim notu: Yolları her zaman standartlaştırın. Yol.TamYoluAl() ve sonucun yükleme klasörünüzde kaldığından emin olun. Asla şunlara güvenmeyin: dosya.DosyaAdı direkt olarak.
Geliştiricilerin Yol Geçişini Sağlayan Hataları
Dosya yükleme güvenlik açıklarının çoğu, aceleyle yazılmış kodlardan ve eksik doğrulama işlemlerinden kaynaklanır ve yol geçişi hatalarına yol açar. Yaygın geliştirici hataları şunlardır:
- Kullanıcı girdilerini doğrudan dosya sistemi yollarına birleştirme
- Güvenen İçerik türü veya yalnızca uzantı doğrulaması
- Kaydetmeden önce yolların normalleştirilmesi atlanıyor.
Geçici klasörleri istekler veya mikro hizmetler arasında yeniden kullanma
⚠️Bu örnek güvenlik açısından yetersizdir, yalnızca eğitim amaçlıdır. Üretim ortamında kullanmayın.
# Flask example vulnerable to path traversal attack @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] file.save('uploads/' + file.filename) return 'Uploaded' Saldırganlar bu basit birleştirmeyi atlayarak dizinler arasında gezinebilirler (../../app.py) ve rastgele dosyalara yazma veya dosyaların üzerine yazma işlemlerini gerçekleştirir. Güvenli sürüm:
# Safe file upload validation from werkzeug.utils import secure_filename @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] name = secure_filename(file.filename) path = os.path.join('uploads', name) file.save(path) return 'Securely uploaded' Eğitim notu: Çerçeve tarafından sağlanan yardımcı işlevleri kullanın, örneğin güvenli_dosyaadı İzin verilen uzantıların kullanımını zorunlu kılın. Giriş dosyalarının yollarını asla manuel olarak birleştirmeyin.
Gerçek hayatta sömürü Pipelines ve Mikroservisler
Yol geçiş saldırıları yalnızca halka açık uç noktalarda gerçekleşmez. Genellikle iç ağlarda da ortaya çıkarlar. CI/CD Yüklenen dosyaları yöneten sistemler, yapıt depoları veya mikro hizmetler. Örneğin, bir derleme yapıtı yöneticisindeki dosya yükleme güvenlik açığı, bir saldırganın derleme komut dosyalarını geçersiz kılmasına olanak sağlayabilir veya Paylaşımlı sunuculara zararlı dosyalar enjekte etmek.
⚠️Bu örnek güvenlik açısından yetersizdir, yalnızca eğitim amaçlıdır. Üretim ortamında kullanmayın.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $DOSYAADI doğrulanmamış, hazırlanmış ../../../etc/passwd Değer, dağıtım sırasında kritik sistem dosyalarının üzerine yazabilir; bu, gerçek dünyada görülen bir yol geçişi saldırısıdır. Güvenli sürüm:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" Eğitim notu: In pipelineDinamik yol değişkenlerinin tümünü temizleyin. Derleme veya dağıtım sırasında dosya sisteminden kaçmayı önlemek için yazma işlemlerini kontrollü dizinlerle sınırlandırın.
Yükleme Mantığında Yol Geçişini Engelleme
Dosya yolu geçişini azaltmak, güçlü girdi doğrulama ve izolasyonuyla başlar. Özellikle yüklenen dosyaları işlerken, dosya adlarını ve yollarını baştan itibaren güvenilmeyen girdiler olarak ele alın.
En İyi Uygulamalar
- Normalleştirme ve kanonikleştirme Kullanmadan önce tüm yolları inceleyin.
- Yüklemeleri kısıtla Web kök dizininin dışında, özel bir dizine.
- İzin verilen listeleri zorunlu kılın Dosya uzantıları ve MIME türleri için.
- Geçici klasörleri asla tekrar kullanmayın. oturumlar veya kullanıcılar arasında.
- Konteynerli depolama kullanın. Mümkün olduğunda yüklenen dosyalar için.
Mini önleyici kontrol listesi
- Her dosya adını şu şekilde doğrulayın: Yol.DosyaAdınıAl() veya esdeger.
- Tam dosya yollarını çözümleyin ve dizin sınırlarını doğrulayın.
- Uzantı ve MIME izin listelerini uygulayın.
- Her kullanıcı veya oturum için ayrı yükleme klasörleri kullanın.
- Yükleme tarama ve doğrulama işlemlerini de dahil edin. CI/CD testleri.
Eğitim notu: Her dosya yükleme işleyicisi potansiyel bir yol geçiş saldırısı vektörüdür. Tüm dosya işleme kodunu doğrulayarak, izole ederek ve tarayarak derinlemesine savunma oluşturun.
Xygeni Güvenli Olmayan Yükleme Akışlarını Nasıl Tespit Ediyor ve Engelliyor?
Xygeni Code Security tarar kod tabanları ve pipelineÜretim aşamasına ulaşmadan önce yol geçiş modellerini tespit etmek için kullanılır. Hem kodda hem de dosyalarda güvensiz yol birleştirmelerini, eksik kanonikleştirmeyi ve tehlikeli dosya işlemlerini işaretler. CI/CD komut.
İşlevsel kod parçası, kontrol bariyeriyle birlikte:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk Eğitim notu: Bütünleştirme Xygeni senin içine pipeline Bu sayede, derleme doğrulama sırasında dosya yükleme güvenlik açıkları ve yol geçiş saldırıları otomatik olarak yakalanır.
Açığı Kapatmak: Bir Sonraki Yol Geçiş Saldırınızı Önlemek
Dosya yükleme uç noktasındaki tek bir yol geçiş hatası, saldırganlara sunucunuzun dosya sistemine erişim imkanı sağlayabilir. Yükleme işleyicilerindeki güvenli olmayan birleştirmeleri gözden geçirin, tüm yolları normalleştirin ve kullanıcı tarafından kontrol edilen dosya adlarına asla güvenmeyin. Ekle güvenlik açığı tarama araçları sevmek Xygeni Code Security sizin için DevSecOps pipeline Ürünler piyasaya sürülmeden önce yol geçiş saldırılarını ve dosya yükleme güvenlik açıklarını tespit etmek. Güvenlik açısından, kaydedilen her dosya, çalıştırılan bir kod gibi ele alınmalıdır!






