2011-07-26 13 views
14

Şu anda Pyramid'deki dosyaları (HTML formu aracılığıyla) yüklemek için aşağıdaki yöntemi kullanıyorum.Dosya yükleme yöntemimi geliştirin Yardım (Pyramid framework)

if request.params.get('form.submitted'): 

    upload_directory = os.getcwd() + '/myapp/static/uploads/' 

    my_file = request.POST.get('thumbnail') 
    saved_file = str(upload_directory) + str(my_file.filename) 

    perm_file = open(saved_file, 'w') 

    shutil.copyfileobj(my_file.file, perm_file) 
    my_file.file.close() 
    perm_file.close() 

Sadece merak ediyorum, bu dosya yüklemelerini kaydetmenin iyi bir yoludur, yöntemimle ilgili herhangi bir güvenlik sorunu var mı? Yöntemimi nasıl geliştirebilirim? Teşekkürler.

+1

Bu büyük dosyalar ile nasıl yapılır? Büyük dosyalar için bence yazmak zorundasınız. Metodunu bir deneme yapalım, teşekkürler! – MFB

+0

Merhaba, şu anda büyük dosyalar üzerinde denemedim. Çoğunlukla bir meg altında dosyalarda. Ama bunu daha büyük dosyalarda denerseniz ve nasıl olduğunu bilmeme izin verirseniz lütfen rapor verin, teşekkürler. – sidewinder

+0

kullanımı os.path.join(); Dize birleştirme daha iyi. –

cevap

14

Werkzug'un safe_join gibi bir dosyayı kullanmak için, yalnızca yükleme dizinini belirtilen dosya adına eklemek yerine kullanacaksınız. Bir saldırgan, ../../../some/important/path dosya adıyla bir POST oluşturabilir ve bu komut dosyasının upload_directory'unuzun dışında bir dosyanın üzerine yazmasına neden olabilir.