帮助改进我的文件上传方法(Pyramid框架)
目前,我在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
之外的某个文件。