帮助改进我的文件上传方法(Pyramid框架)

14 投票
1 回答
4085 浏览
提问于 2025-04-16 22:19

目前,我在Pyramid框架中使用以下方法来上传文件(通过HTML表单)。

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 个回答

14

你应该使用像werkzeug里的safe_join这样的东西,而不是直接把上传目录加到文件名后面。因为攻击者可以发送一个POST请求,文件名写成../../../some/important/path,这样就可能让这个脚本覆盖掉你upload_directory之外的某个文件。

撰写回答