Python Path Traversal Güvenlik Açıkları

0 Yanıt 1 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Giriş ve Temel Kavramlar
Python, özellikle web uygulamalarında sıkça kullanılan esnek ve güçlü bir dil olmasına rağmen, yanlış yapılandırıldığında veya güvenlik önlemleri alınmadan kullanıldığında çeşitli açıklar barındırabilir. Bunlardan biri de Path Traversal (Yol Sıçraması) olarak bilinen güvenlik açığıdır. Bu açık, saldırganların sunucu dosya sisteminde izin verilen dizinler dışında yer alan dosyalara erişmesine olanak tanır. Bu durum, hassas bilgiler veya sistem dosyalarının ifşa edilmesine neden olabilir.

Path Traversal Açığının Çalışma Prensibi
Path traversal, genellikle kullanıcı girdisinin dosya yollarında kullanılmasıyla ortaya çıkar. Bir web uygulamasında, dosya yükleme veya okuma işlemleri sırasında, kullanıcıdan alınan girdiler uygun şekilde filtresiz kullanılırsa, aşağıdaki gibi kötü niyetli yollar oluşturulabilir:

  • "../../../../etc/passwd" veya "..\..\..\..\windows\system32\config\SAM" gibi dosya yolu dizileri.
  • Bu diziler, uygulamanın erişim izni dahilinde olmayan sistem dosyalarına ulaşmaya çalışır.

    İşte temel sorun, kullanıcı girdisinin doğrulanmadan doğrudan dosya yolu olarak kullanılmasıdır.

    Güvenlik Önlemleri ve En İyi Uygulamalar
    Path traversal saldırılarına karşı alınacak en önemli önlem, girdilerin katı şekilde doğrulanmasıdır.

  • Girdi Doğrulama ve Filtreleme: Kullanıcıdan alınan dosya yolu parametreleri, sadece izin verilen dizinler ve dosya isimleriyle sınırlandırılmalı. Ayrıca, dizin gezinme karakterleri (../ veya ..\) engellenmeli veya temizlenmeli.
  • Whitelist Kullanımı: Erişim izinleri önceden belirlenmiş ve güvenli dizinler veya dosya isimleriyle sınırlandırılmalı. Bu, saldırganların rastgele yol girişlerini kullanmasını engeller.
  • Dosya Yolu Normalize Etme: Python'da os.path.normpath() fonksiyonu, kullanıcı girdisinin yolunu normalize ederek, dizin gezinme karakterlerini ve gereksiz bölümleri temizler.
  • Erişim Kontrolü ve Yetkilendirme: Dosya erişiminde, sadece belirlenmiş yetkilere sahip kullanıcıların erişimi sağlanmalı ve sistem seviyesinde erişim kontrolleri uygulanmalı.

    Python'da Path Traversal Güvenliği
    Python'da, özellikle Flask veya [i>Django[/i] gibi web framework’lerinde, dosya okuma/yazma işlemlerinde bu güvenlik açıklarına dikkat edilmelidir.

    Örneğin, aşağıdaki kod parçası, kullanıcıdan alınan dosya yolunu doğrudan kullanmakta ve güvenlik açısından risk taşımaktadır:

    KOD
    1234  
    def read_file(filename):  
        with open(filename, 'r') as f:  
            return f.read()  
    


    Bunu güvenli hale getirmek için, os.path.normpath() ile normalize edilerek, izin verilen dizin sınırları içinde olup olmadığını kontrol etmek gerekir:

    KOD
    12345678910  
    import os  
    
    def safe_read_file(base_dir, user_input):  
        # Normalize ve dizin sınırlarını belirle  
        safe_path = os.path.normpath(os.path.join(base_dir, user_input))  
        if not safe_path.startswith(os.path.normpath(base_dir)):  
            raise Exception("Geçersiz dosya yolu")  
        with open(safe_path, 'r') as f:  
            return f.read()  
    


    Sonuç ve Değerlendirme
    Path traversal açıkları, uygun girdi doğrulama ve erişim kontrolleriyle etkili biçimde engellenebilir. Güvenlik politikaları, uygulamanın dosya erişim mantığını katı kurallarla belirlemeli, normalize etme ve whitelist uygulamasıyla olası saldırılar minimize edilmelidir.

    Bu konuda uygulama geliştirenlerin, özellikle kullanıcı girdilerini doğrudan dosya sistemine yansıtmadan önce detaylı testler yapması ve güvenlik açıklarını düzenli olarak denetlemesi önemlidir.
  • Yanıt vermek için giriş yapmış olmalısınız.

    0 alıntı seçildi