2011-07-26 23 views
14

Hiện tại, tôi đang sử dụng phương pháp sau để tải lên tệp (qua biểu mẫu HTML) trong Kim tự tháp.Giúp cải thiện phương pháp tải lên tệp của tôi (khung Kim tự tháp)

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() 

Tôi tự hỏi, đây có phải là cách hay để lưu tệp tải lên, có bất kỳ mối lo ngại nào về bảo mật với phương pháp của tôi không? Tôi có thể cải thiện phương pháp của mình bằng cách nào khác. Cảm ơn.

+1

Làm thế nào điều này đi với các tệp lớn? Tôi nghĩ rằng đối với các tệp lớn, bạn phải viết theo khối. Tôi sẽ cung cấp cho phương pháp của bạn một thử mặc dù, cảm ơn! – MFB

+0

Xin chào, hiện tại tôi chưa thử trên các tệp lớn. Chủ yếu là trên các tập tin dưới một meg. Nhưng xin vui lòng báo cáo lại nếu bạn cố gắng này trên các tập tin lớn hơn và cho tôi biết làm thế nào nó đi, cảm ơn. – sidewinder

+0

sử dụng os.path.join(); tốt hơn so với chuỗi nối. –

Trả lời

14

Bạn sẽ muốn sử dụng thứ gì đó như sốcủa werkzug thay vì chỉ thêm thư mục tải lên vào tên tệp đã cho. Kẻ tấn công có thể tạo POST với tên tệp là ../../../some/important/path và khiến tập lệnh này ghi đè lên một số tệp bên ngoài upload_directory của bạn.