2011-07-26 4 views
14

現在、私はPyramidで(HTMLフォーム経由で)次の方法でファイルをアップロードしています。ファイルのアップロード方法を改善するヘルプ(Pyramidフレームワーク)

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

これはファイルのアップロードを保存する良い方法ですか、私の方法でセキュリティ上の問題がありますか?どのようにして私の方法を改善できますか?ありがとう。

+1

これは大きなファイルでどのように行われますか?私は大きなファイルの場合、あなたはチャンクで書く必要があると思います。私はあなたのメソッドを試してみるつもりですが、ありがとう! – MFB

+0

こんにちは、私は大きなファイルでこれを試していない瞬間です。主にメグの下のファイルにしかし、大きなファイルでこれを試してみて、それがどうなっているのか教えてください。感謝します。 – sidewinder

+0

os.path.join()を使用します。文字列の連結よりも優れています。 –

答えて

14

アップロードディレクトリを特定のファイル名に追加するのではなく、werkzugのsafe_joinのようなものを使用したいと思うでしょう。攻撃者はファイル名が../../../some/important/pathのPOSTを作成し、このスクリプトでupload_directoryの外のファイルを上書きする可能性があります。

関連する問題